2016-06-29 28 views
0

我不得不从数组的每个字符串(元素)中列表(var。“模式”)的符号出现次数。我想通过在变量中设置模式来使它更通用。但是,当我尝试通过使用RegExp对象来实现它时,它不起作用。JavaScript的正则表达式对象与内联正则表达式

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

这种变异不起作用。

var pattern = "@#%"; 
var arr = ['[email protected]','D#nse Cr%wd','Cr#m#n#l [email protected]@[email protected]']; 

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 = ['[email protected]','D#nse Cr%wd','Cr#m#n#l [email protected]@[email protected]']; 

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

结果将是:

1 
2 
6 

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

在此先感谢。

回答

1

var pattern = "@#%"; 
 
var arr = ['[email protected]','D#nse Cr%wd','Cr#m#n#l [email protected]@[email protected]']; 
 

 
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 + ']'; 

除去周边/因为你在正则表达式模式传递作为一个stringRegExp的构造函数。

Mozilla says有关这些两种类型:

您构造以两种方式中的一种正则表达式:

使用正则表达式文本,它由斜线之间围成的图案 的,具体如下:

var re = /ab+c/; 

正则表达式文字提供的 编译正则表达式时,SCR ipt被加载。当常规 表达式将保持不变时,请使用它来获得更好的性能。

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

var re = new RegExp("ab+c"); 
相关问题