教程里写:
替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
可是下面这两个表达式都返回 true
/m|food/.test('mood') /m|food/.test('m')
那 | 的优先级怎么算呢
![]() | 1 geelaw 2018-08-07 16:42:13 +08:00 ![]() 因为 m|food 匹配了 mood 中的 m |
![]() | 2 wweir 2018-08-07 16:51:29 +08:00 还是喜欢 [mf]ood,(mood|food) 也还好 至于优先级什么的,对于正则这种有百家方言的玄学,不考虑了,只要我写的东西是对的就行。怕出错,多上括号就好了 |
4 leaves7i 2018-08-07 16:59:38 +08:00 via Android 你少写了括号? 教程这不是说了,请使用 mood|food 或 (m|f)ood |
![]() | 5 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 |
![]() | 6 bumz 2018-08-07 17:19:12 +08:00 /^m|food$/.test('mood') // false /^m|food$/.test('m') // true |
![]() | 7 bumz 2018-08-07 17:19:57 +08:00 不加 ^...$ 的话只要子串识别就会返回 true |
![]() | 8 weixiangzhe 2018-08-08 02:00:56 +08:00 via iPhone 楼上还是错了 /^(m|food)$/.test('mood') // false /^(m|food)$/.test('m') // true |
![]() | 9 weixiangzhe 2018-08-08 02:04:07 +08:00 via iPhone 楼主要的是 /[mf]ood/ |