为什么这段代码会返回true?
需要匹配的字符串:ab
正则表达式: /^a|b$/
但是当我加上括号,修改为以下形式:
正则表达式: /^(a|b)$/
它就会返回false
。
为什么这段代码会返回true?
需要匹配的字符串:ab
正则表达式: /^a|b$/
但是当我加上括号,修改为以下形式:
正则表达式: /^(a|b)$/
它就会返回false
。
/(^a)|(b$)/
。
原因是,管道运算符(“选择运算符”)是所有正则表达式运算符中优先级最低的:http://www.regular-expressions.info/alternation.html(第一标题下的第三段)。/^a|b$/
匹配以 a
开头或以 b
结尾的字符串。所以它可以匹配 afoo
、barb
、a
、b
。
/^(a|b)$/
:匹配以 a
或 b
开头和结尾的字符串。所以它只能匹配一个 a
或 b
,不能匹配其他内容。|
优先级很低。a
开头或以 b
结尾。a
或 b
。|
的优先级低于锚点,因此你要么使用 ^a
或 b$
(这是正确的),而不是第二个意思是“一个单字符字符串,要么是 a
要么是 b
”(这是错误的)。
^a|b$
中,你匹配的是开头的 a
或结尾的 b
。^(a|b)$
中,你匹配的是仅有的字符 a
或 b
(在开头和结尾)。