我的正则表达式没有'不起作用

My regex doesn't work

本文关键字:不起作用 正则表达式 我的      更新时间:2023-09-26

我看不出创建新的regexp对象和使用/.../有什么区别因为如果我执行以下操作,我会得到:

真-假

alert(/^'d{4}$/.test(obj.value)+" "+(new RegExp("^'d{4}$")).test(obj.value));

提前感谢

从字符串创建RegExp对象时,必须考虑到字符串常量语法(如RegExp语法)将'视为一个特殊字符:

alert(/^'d{4}$/.test(obj.value)+" "+(new RegExp("^''d{4}$")).test(obj.value));

应该工作得更好。请注意字符串版本中的'',而不是单个'

当你有这样的东西时会发生什么

var myRegExp = new RegExp( "blah blah 'd blah blah" );

首先,解析器必须查看表达式的低级部分,如变量名、=符号、new等。字符串常量是表达式的低级基本元素之一。解析器必须将字符串的源代码转换为运行时字符串值,这涉及到读取引号之间的字符。其中的'd将意味着;对于解析器的字符串部分,请记住—字符串应该包含一个"d"。("d"字符并不特别,所以'd在字符串中确实没有做任何有趣的事情,但'仍然会被"吃掉"。)

因此,现在我们已经获得了表达式的基本构建块,因此在运行时,可以使用解析器组装的字符串值来调用RegExp构造函数。现在,是时候进行RegExp语法分析了。RegExp解析器现在看不到'd,因为'在构造字符串常量的过程中消失了。

因此,通过将传递给RegExp构造函数的字符串中的'加倍,可以确保单个'存活到正则表达式实际被解释为这样的点。当您使用"本机"正则表达式语法(/.../)时,您只需要一个',因为正则表达式只解析一次。