Javascript RegExp 与构造函数和文字不同的结果

Javascript RegExp different results from constructor and literal

本文关键字:结果 文字 RegExp 构造函数 Javascript      更新时间:2023-09-26

我正在研究创建不同的正则表达式,寻找强强度和中等强度的用户密码,我注意到相同的表达式给出了不同的结果(使用前瞻、反向引用和负前瞻(,具体取决于我使用的是RegExp构造函数还是文字语法。

我已经在IE和Firefox上进行了测试,并在这里创建了一个小例子:http://jsfiddle.net/4z4gxxkL/

我使用 RegExp 构造函数的原因是我将表达式作为字符串存储在 JSON 中 - 但在密码的情况下,我可以使用文字语法。

我所有其他表达式都非常简单,并产生了预期的结果。有人可以解释一下这里发生了什么吗?这是 ECMAScript 标准的问题吗?

我总是倾向于使用 http://regexr.com/来测试我的正则表达式

我通过使用给出falseRegExp("^(?=.*'d)(?=.*[a-zA-Z])(?!.*(.)'1).{5,}$", "g")对"abc123"进行测试来发现这种差异,但是使用/^(?=.*'d)(?=.*[a-zA-Z])(?!.*(.)'1).{5,}$/g的测试给出了true

从构造函数创建正则表达式实例时RegExp您需要使用另一个'转义',因为它是一个转义序列。

第一个工作正常,因为String中没有',而在另一些中,它就在那里,没有逃脱

转义版本