为什么第一次测试失败?
/^[ab](?=[cd])$/.test('ac') // => false
/^[ab](?=[cd])/.test('ac') // => true
只有字符串' ac',' ad'' bc' &安培; ' BD'应该通过。
没有像' ac bd'或者' acbd'。
然而,使用$
并不是第一个正则表达式的帮助,而第二个也会传递像#acbd'这样的字符串。
答案 0 :(得分:2)
您需要了解前瞻的工作方式。
(?=[cd])$
肯定前瞻检查以下字符是否与前瞻后的模式匹配(在您的情况下,字符串的结尾)。字符串的结尾不是c
也不是d
。因此,没有匹配。
您需要将$
置于预测中以使其与a
匹配:
^[ab](?=[cd]$)
答案 1 :(得分:1)
这个正则表达式应该通过:
/^[ab](?=[cd]$)/.test('ac')
原因
/^[ab](?=[cd])$/.test('ac')
失败,因为$
或a
之后b
(输入结束)不存在(c
后面有一个字母a
)。< / p>
答案 2 :(得分:0)
/^[ab](?=[cd])$/.test('ac') // => false
当你没有捕获c
时失败了。Lookahead
是0
宽度断言。他们不会捕获任何东西只是断言。你的字符串匹配失败,因为你启用了anchors
所以整个字符串应该匹配。在你的第二种情况下,它会因为没有$
而获得部分匹配。
您需要的是
^[ab][cd]$