2015-06-04 44 views
1
var a = 'toto titi (should be removed) 5'.replace(/\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty/gi, '!$!'); 
var b = 'toto titi (should be removed) 5'.replace(new RegExp('\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi'), '!$!'); 
console.log(a); 
console.log(b); 

我想通过空间的每个字符是不是数字或字母或一个空格和字符这是beetween更换差异( )和[]。 我有两个相同的句子,我使用相同的模式。唯一的区别是我对var a使用/regex/flags语法,对于var b使用对象语法new Regex('regex','flags')的JavaScript beetween新的正则表达式(“正则表达式”,“旗”)和/正则表达式/标志

然而结果与a和b不一样。

输出是:

toto titi !$! 5 //a (it's the expected result) 
!$!!$!   //b 

我不明白为什么。你能解释我吗? 我必须使用对象语法,因为我需要用变量构建正则表达式。

+0

使用Regexp构造函数时,您需要双重转义。 – hwnd

回答

4

在字符串,反斜杠(\)用于转义特殊字符,如在\\\'\"。在正则表达式中,反斜杠也用于转义,例如文字\(\.

这意味着,当从字符串创建正则表达式时,还需要在字符串中反斜杠。所以,你会怎么做:

new RegExp('\\(.*\\)|\\[.*\\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi') 

使用这个它赋予了预期的结果。

相关问题