2011-07-24 6 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; 
} 

REFINED:

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

Typo申し訳ありません! '^、\ s'を意味します。私が配列を使うのが好きでない理由の1つは、あなたが簡単にカンマを置き忘れてしまうからです。単一の正規表現の岩! – ThomasReggi

+0

+1 for single regex。 – jfriend00

+0

さて、それは理にかなっています。 +1 – ridgerunner

5

RegExpコンストラクタは、/文字に包まれていない、生の表現をとります。 したがって、すべての正規表現にはそれぞれ2つの/が含まれていますが、これはあなたが望むものではありません。

代わりに、あなたが実際の正規表現リテラルの配列を作る必要があります。

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

わたしは、配列内の '/ ^、\ s /'が引用符で囲まれていないと、配列を破壊するという印象を受けました。まずそれをテストしなければなりません。ありがとう。 – ThomasReggi