2016-06-29 78 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"); 
相關問題