2011-01-26 46 views
2

我想用JavaScript中的方括號將給定字符串中某些單詞的所有匹配項打包。在JavaScript中修改RegEx匹配

說這些話是蘋果,橘子和香蕉。然後一個主題文本"You are comparing apples to oranges."應該變成"You are comparing [apples] to [oranges]."

正則表達式爲(apples|oranges),但問題是如何包裝或更一般地修改每個匹配。 String.replace()可讓您用一些預定義的值替換匹配的搜索結果,而不是基於匹配的值。

感謝。

+2

其實,對於正則表達式將是`(蘋果|桔子)`.. 。 – gnarf 2011-01-26 20:04:20

回答

6
js> var str = 'You are comparing apples to oranges.'; 
js> str.replace(/(apples|oranges)/g, '[$1]') 
You are comparing [apples] to [oranges]. 

如果你喜歡一個功能,你可以簡單地養活的話數組:

function reg_quote(str, delimiter) { 
    return (str+'').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\'+(delimiter || '')+'-]', 'g'), '\\$&'); 
} 

function mark_words(str, words) { 
    for(var i = 0; i < words.length; i++) { 
     words[i] = reg_quote(words[i]); 
    } 
    return str.replace(new RegExp('(' + words.join('|') + ')', 'g'), '[$1]') 
} 

演示:

js> mark_words(str, ['apples', 'oranges']); 
You are comparing [apples] to [oranges]. 
js> mark_words(str, ['apples', 'You', 'oranges']); 
[You] are comparing [apples] to [oranges]. 

如果你想它不區分大小寫,更換'g''gi'

2
'You are comparing apples to oranges.'.replace(/(apples|oranges)/g, "[$1]"); 
//"You are comparing [apples] to [oranges]." 
1

這是一個非常醜陋的代碼,但它的工作:

var string = "You are comparing apples to oranges"; 
    var regEx = "(apples|oranges)"; 
    var re = new RegExp(regEx, "g"); 
    for (var i=0; i<string.match(re).length; i++) 
    { 
     string = string.replace(string.match(re)[i], "[" + string.match(re)[i] + "]"); 
    } 
    alert(string);