2011-07-24 214 views
0

我試圖創建一個函數來替換數組中的多個正則表達式值。這適用於數組不包含任何類型的引號,這是有問題的,當我想在我的模式中使用逗號。所以我一直在試圖找到一種替代方式來服務這種模式,但沒有運氣。有任何想法嗎?帶正則表達式的Javascript正則表達式陣列

function removeCharacters(str){ 
    //ucpa = unwanted character pattern array 
    //var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/]; 
    var ucpa = ["/{/","/}/","/--/","/---/","/-/","/^.\s/","/^,\s/"]; 
    for (var i = 0; i < ucpa.length; i++){ 
     //does not work 
     var pattern = new RegExp(ucpa[i],"g"); 
     var str = str.replace(pattern, " "); 
    } 
    return str; 
} 

WORKING:

function removeCharacters(str){ 
    //ucpa = unwanted character pattern array 
    var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/,/^,\s/]; 
    for (var i = 0; i < ucpa.length; i++){ 
     var str = str.replace(ucpa[i], " "); 
    } 
    return str; 
} 

精製:

function removeCharacters(str){ 
    var pattern = /[{}]|-{1,3}|^[.,]\s/g; 
    str = str.replace(pattern, " "); 
    return str; 
} 

回答

3

你也可以換全部成一個單一的正則表達式:

var str = str.replace(/[{}]|-{1,3}|^[.,]\s/g, " ") 

雖然我不知道,如果這正是你想要什麼,因爲你的一些正則表達式是無意義的,例如,^\s永遠不會匹配。

+0

錯別字對不起!意思是'^,\ s'。我不喜歡使用陣列的部分原因是因爲您可能容易錯位逗號。單一的正則表達式岩石! – ThomasReggi

+0

單個正則表達式的+1。 – jfriend00

+0

好吧,現在它是有道理的。 +1 – ridgerunner

5

RegExp構造函數採用原始表達式,而不是裹在/字符。 因此,您所有的正則表達式都包含兩個/ s,這不是您想要的。

相反,你應該使實際正則表達式文字的數組:

var ucpa = [ /.../g, /",\/.../g, ... ]; 
+0

Woah,我的印象是數組中的'/ ^,\ s /'不受引號限制會破壞數組。應該先測試一下。謝謝。 – ThomasReggi

相關問題