2015-01-06 45 views
1

我想辦法讓通過不同的正則表達式文本/字符串經過表達式替換,以及不同的更換JS得到一個字符串幾次

容易,我可以在PHP這樣做,因爲:

$pattern[] = "regex"; $replacement[] = "replace string"; 
$pattern[] = "regex"; $replacement[] = "replace string"; 
$pattern[] = "regex"; $replacement[] = "replace string"; 
$pattern[] = "regex"; $replacement[] = "replace string"; 

echo preg_replace($pattern,$replacement,$string); 

我仍在學習JavaScript,我想.replace()但有沒有辦法做一個表達式數組?重複.replace()不是技術性的。特別是如果它是一個大表達式的列表。

+1

或許你可以從https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions學習這是一個非常不錯的文章,你可以開始 –

+1

的JavaScript不提供與'.replace'一起使用數組pf表達式的選項。也許你可以''用'|'加入數組(模式)來創建一個正則表達式。 –

+0

我不清楚你想要做什麼。菲利克斯的回答是你想要的,還是你想要別的東西? –

回答

0

這應該爲你工作。

它要求兩個數組具有相同數量的元素。

function REArray(contents,sArray,rArray) { 
    if(sArray.length == rArray.length) { 
     for(i=0;i<sArray.length;i++) { 
      rx_this = new RegExp(sArray[i],"g"); 
      contents = contents.replace(rx_this,rArray[i]); 
     } 
    } 
    return contents; 
} 

var sx = ["cat","best","\\d"]; 
var rx = ["dog","worst","7"]; 
console.log(REArray("My cat is the best. He is 3.",sx,rx)); 

在JavaScript中存儲正則表達式的變量時,必須轉義反斜槓。 (\w變成\\w,\[b\]變成\\[b\\]等)。它可能會讓人很頭疼。 (匹配轉義斜槓\\看起來像\\\\)。

有些人喜歡在其正則表達式中使用/,並使用替換將它們轉換爲\\

像這樣的事情

var rx_this; 

function REArray(contents,sArray,rArray) { 
    if(sArray.length == rArray.length) { 
     for(i=0;i<sArray.length;i++) { 
      rx_this = sArray[i].replace(/\//g,"\\"); 
      rx_this = new RegExp(rx_this,"g"); 
      contents = contents.replace(rx_this,rArray[i]); 
     } 
    } 
    return contents; 
} 

var sx = ["cat","best/.","[3]"]; 
var rx = ["dog","worst","7"]; 
console.log(REArray("My cat is the best. He is 3.",sx,rx)); 
0

preg_replace獨立運行每個模式,因此一個模式對前一次替換的結果起作用。

function emulate_preg_replace(regexes, replacements, text) { 
    if (typeof regexes === "string" || typeof regexes.length !== "number") { 
     // Single pattern 
     regexes = [regexes]; 
    } 
    var count = regexes.length; 
    if (typeof replacements === "string" || typeof replacements.length !== "number") { 
     // Single replacement 
     var singleReplacement = replacements; 
     replacements = []; 
     for (var i = 0; i < count; i++) { 
      replacements.push(singleReplacement); 
     } 
    } 

    for (var i = 0; i < count; i++) { 
     text = text.replace(regexes[i], replacements[i]); 
    } 
    return text; 
} 
alert(emulate_preg_replace([/c+/g, /b+/g], ["b", "a"], "bbbcccbbb")); // displays "a"