为什么这段代码会返回true?
要匹配的字符串:ab
模式:/^a|b$/
但是当我把括号放在这样的时候:
模式:/^(a|b)$/
然后它将返回false
。
答案 0 :(得分:14)
没有括号的第一个模式相当于/(^a)|(b$)/
原因是,管道运算符(“交替运算符”)具有所有正则表达式运算符的最低优先级:http://www.regular-expressions.info/alternation.html(第一个标题下面的第三段)
答案 1 :(得分:7)
/^a|b$/
匹配以a
OR开头且以b
结尾的字符串。因此它匹配afoo
,barb
,a
,b
。
/^(a|b)$/
:匹配以a
或b
开头和结尾的字符串。因此,它匹配a
或b
,而不是其他任何内容。
这是因为更改|
在正则表达式运算符中的优先级非常低。
答案 2 :(得分:4)
第一种方法以a
开头,或以b
结束。
第二个意味着1个字符,a
或b
。
答案 3 :(得分:1)
|
的优先级低于锚点,所以你要么说^a
或b$
(这是真的)而不是第二个意思是“单个字符串” ,a
或b
“(这是假的)。
答案 4 :(得分:1)
在^a|b$
中,您在开头匹配a
或在结尾处匹配b
。
在^(a|b)$
中,您匹配的是a
或b
是唯一的字符(开头和结尾)。