正则表达式 | 的优先级

2018-08-07 16:37:12 +08:00
 bdbd001

教程里写:

替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

可是下面这两个表达式都返回 true

/m|food/.test('mood')
/m|food/.test('m')

那 | 的优先级怎么算呢

3412 次点击
所在节点    JavaScript
9 条回复
geelaw
2018-08-07 16:42:13 +08:00
因为 m|food 匹配了 mood 中的 m
wweir
2018-08-07 16:51:29 +08:00
还是喜欢 [mf]ood,(mood|food) 也还好
至于优先级什么的,对于正则这种有百家方言的玄学,不考虑了,只要我写的东西是对的就行。怕出错,多上括号就好了
bdbd001
2018-08-07 16:55:54 +08:00
@geelaw
被绕进去了, 把 test 方法换成 exec 方法就看明白了,确实只匹配到了 m
leaves7i
2018-08-07 16:59:38 +08:00
你少写了括号?

教程这不是说了,请使用
mood|food

(m|f)ood
mingl0280
2018-08-07 17:12:45 +08:00
1. m|food -> mood,匹配到了 m
2. m|food -> m,还是匹配到了 m
3.正确操作:(m|f)ood 或者[mf]ood
bumz
2018-08-07 17:19:12 +08:00
/^m|food$/.test('mood') // false
/^m|food$/.test('m') // true
bumz
2018-08-07 17:19:57 +08:00
不加 ^...$ 的话只要子串识别就会返回 true
weixiangzhe
2018-08-08 02:00:56 +08:00
楼上还是错了
/^(m|food)$/.test('mood') // false
/^(m|food)$/.test('m') // true
weixiangzhe
2018-08-08 02:04:07 +08:00
楼主要的是 /[mf]ood/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX