新Regex('regex','flags')和/ regex / flags之间的JavaScript差异

时间:2015-06-04 21:21:23

标签: javascript regex

/regex/flags

我想用空格替换每个不是数字或字母或空格的字符以及beetween()和[]之间的字符。 我有两个相同的句子,我使用相同的模式。唯一的区别是我使用var a的{​​{1}}语法和new Regex('regex','flags')的对象语法var b

然而,a和b的结果并不相同。

输出是:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

使用它可以得到预期的结果。