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

Kor*_*sik 17 javascript regex

我对这个小的JavaScript代码有些麻烦:

var text="Z Test Yeah ! Z";

// With literal syntax, it returns true: good!
alert(/(Z[\s\S]*?Z)/g.test(text));

// But not with the RegExp object O_o
var reg=new RegExp('Z[\s\S]*?Z','g');
alert(reg.test(text));
Run Code Online (Sandbox Code Playgroud)

我不明白为什么文字语法和RegExp对象没有给我相同的结果...问题是我必须使用RegExp对象,因为我稍后会有一些变量.

有任何想法吗?

提前致谢 :)

zzz*_*Bov 21

您需要\在字符串文字中加倍转义字符,这就是通常首选正则表达式文字的原因.

尝试:

'Z[\\s\\S]*?Z'
Run Code Online (Sandbox Code Playgroud)

  • @Geek,使用的第一个正则表达式是RegExp文字.使用的第二个正则表达式是一个RegExp对象构造函数,其字符串文字作为参数.我的回答明确指出你需要在字符串文字中双重转义``\``字符.对于字符串文字,````用于为值创建转义序列,而在正则表达式中,我们希望转义序列为*be*值.```\n"``创建一个值为newline的字符串,而```\\n"``创建一个值为``\n``的字符串.这种区别对正则表达式非常重要. (4认同)