JS - 积极向前看&行结束

时间:2015-06-02 09:51:26

标签: javascript regex

为什么第一次测试失败?

/^[ab](?=[cd])$/.test('ac') // => false

/^[ab](?=[cd])/.test('ac')  // => true

只有字符串' ac',' ad'' bc' &安培; ' BD'应该通过。

没有像' ac bd'或者' acbd'。

然而,使用$并不是第一个正则表达式的帮助,而第二个也会传递像#acbd'这样的字符串。

3 个答案:

答案 0 :(得分:2)

您需要了解前瞻的工作方式。

(?=[cd])$ 肯定前瞻检查以下字符是否与前瞻后的模式匹配(在您的情况下,字符串的结尾)。字符串的结尾不是c也不是d。因此,没有匹配。

您需要将$置于预测中以使其与a匹配:

^[ab](?=[cd]$)

请参阅demo on Regex101.com

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

这个正则表达式应该通过:

/^[ab](?=[cd]$)/.test('ac') 

原因

/^[ab](?=[cd])$/.test('ac') 

失败,因为$a之后b(输入结束)不存在(c后面有一个字母a)。< / p>

答案 2 :(得分:0)

/^[ab](?=[cd])$/.test('ac') // => false

当你没有捕获c时失败了。Lookahead0宽度断言。他们不会捕获任何东西只是断言。你的字符串匹配失败,因为你启用了anchors所以整个字符串应该匹配。在你的第二种情况下,它会因为没有$而获得部分匹配。

您需要的是

^[ab][cd]$