我必须在数组的每个字符串(元素)中计算列表中的符号出现(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
你能解释一下这个区别吗?
提前致谢。
答案 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");