javascript正则表达式对象与内联正则表达式

时间:2016-06-29 05:52:47

标签: javascript regex expression

我必须在数组的每个字符串(元素)中计算列表中的符号出现(var。" pattern")。我希望通过在变量中设置模式来使其更具普遍性。但是,当我尝试使用RegExp对象时,它不起作用。

我无法理解代码的两个部分之间的区别:

此变体不起作用。

var pattern = "@#%";
var arr = ['T@wn','D#nse Cr%wd','Cr#m#n#l M@st@m@nd'];

for(var i=0; i < arr.length; i++){
 l = '/[^'+pattern+']/';
 g = new RegExp(l,"gi");
 console.log(arr[i].replace(g,"").length);
}

结果将是:

4
11
18

相同的变体,但没有RegExp对象,工作正常:

var arr = ['T@wn','D#nse Cr%wd','Cr#m#n#l M@st@m@nd'];

for(var i=0; i < arr.length; i++){
 console.log(arr[i].replace(/[^@#%]/gi,"").length);
}

结果将是:

1
2
6

你能解释一下这个区别吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

var pattern = "@#%";
var arr = ['T@wn','D#nse Cr%wd','Cr#m#n#l M@st@m@nd'];

for(var i=0; i < arr.length; i++){
 l = '[^' + pattern + ']';
 g = new RegExp(l, "gi");
 console.log(arr[i].replace(g,"").length);
}

此行应更改为:

l = '/[^' + pattern + ']/';

为:

l = '[^' + pattern + ']';

删除周围的/,因为您将正则表达式模式作为string传递给RegExp构造函数。

Mozilla says关于这两种类型:

  

您可以通过以下两种方式之一构建正则表达式:

     

使用由模式组成的正则表达式文字   斜杠之间包含如下:

var re = /ab+c/;
     

正则表达式文字提供了编译   加载脚本时的正则表达式。当经常   表达式将保持不变,使用它来获得更好的性能。

     

或者调用RegExp对象的构造函数,如下所示:

var re = new RegExp("ab+c");