JavaScript和正则表达式:文字语法与RegExp对象

JavaScript和正则表达式:文字语法与RegExp对象,javascript,regex,Javascript,Regex,我对这个小JavaScript代码有一些问题: var text=“Z测试耶!Z”; //对于文本语法,它返回true:good! 警报(/(Z[\s\s]*?Z)/g.test(文本)); //但不能使用RegExp对象O_O var reg=new RegExp('Z[\s\s]*?Z','g'); 警报(注册测试(文本)); 我不明白为什么文字语法和RegExp对象不能给我相同的结果。。。 问题是我必须使用RegExp对象,因为我以后会有一些变量 有什么想法吗 提前感谢:)您需要在字符串

我对这个小JavaScript代码有一些问题:

var text=“Z测试耶!Z”;
//对于文本语法,它返回true:good!
警报(/(Z[\s\s]*?Z)/g.test(文本));
//但不能使用RegExp对象O_O
var reg=new RegExp('Z[\s\s]*?Z','g');
警报(注册测试(文本));
我不明白为什么文字语法和RegExp对象不能给我相同的结果。。。 问题是我必须使用RegExp对象,因为我以后会有一些变量

有什么想法吗


提前感谢:)

您需要在字符串文本中双转义
\
字符,这就是为什么通常首选正则表达式文本

尝试:


我认为这是因为你必须避开你的反斜杠,即使使用单引号。试试这个:

new RegExp('Z[\\s\\S]*?Z','g')

这是正确的,用反斜杠就行了。。。!非常感谢,因为我们不需要文字语法,所以我不认为它们对于RegExp对象是必需的。再次感谢你@为什么我们需要在第二种情况下而不是第一种情况下转义“\”?@Geek,使用的第一个正则表达式是RegExp文本。使用的第二个正则表达式是以字符串文字作为参数的RegExp对象构造函数。我的回答特别指出,您需要在字符串文本中对
\
字符进行双转义。对于字符串文本,
\
用于为值创建转义序列,而在正则表达式中,我们希望转义序列为值
“\n”
创建一个值为换行符的字符串,而
“\\n”
创建一个值为
\n
的字符串。这一区别对于正则表达式模式非常重要。很好地编写了格式良好、编写良好的第一个问题。
new RegExp('Z[\\s\\S]*?Z','g')