Javascript 我的正则表达式没有';行不通

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(

我看不出创建新的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构造函数的字符串中的
\
加倍,可以确保单个
\
保留到正则表达式实际被解释为这样的点。当您使用“本机”正则表达式语法(
/…/
)时,您只需要一个
\
,因为正则表达式只解析一次。

当您从字符串创建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构造函数的字符串中的
\
加倍,可以确保单个
\
保留到正则表达式实际被解释为这样的点。当您使用“本机”正则表达式语法(
/…/
)时,您只需要一个
\
,因为正则表达式只解析一次。

您期望什么?您期望什么?