Javascript 我的正则表达式没有';行不通
我看不出创建新的regexp对象与使用Javascript 我的正则表达式没有';行不通,javascript,regex,object,Javascript,Regex,Object,我看不出创建新的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(
/…/
因为如果我执行以下操作,我会得到:
真假
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构造函数的字符串中的
\
加倍,可以确保单个\
保留到正则表达式实际被解释为这样的点。当您使用“本机”正则表达式语法(/…/
)时,您只需要一个\
,因为正则表达式只解析一次。当您从字符串创建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构造函数的字符串中的
\
加倍,可以确保单个\
保留到正则表达式实际被解释为这样的点。当您使用“本机”正则表达式语法(/…/
)时,您只需要一个\
,因为正则表达式只解析一次。您期望什么?您期望什么?