2013-07-23 43 views
10

我知道str.replace(/x/g, "y")替換所有X的字符串中的,但我想這樣做JS使用可變

function name(str,replaceWhat,replaceTo){ 
    str.replace(/replaceWhat/g,replaceTo); 
} 

如何使用第一個參數變量替換字符串的所有出現?

回答

24

RegExp構造函數接受一個字符串,並創建一個正則表達式出來。

function name(str,replaceWhat,replaceTo){ 
    var re = new RegExp(replaceWhat, 'g'); 
    str.replace(re,replaceTo); 
} 

如果replaceWhat可能包含在正則表達式的特殊字符,你可以這樣做:

function name(str,replaceWhat,replaceTo){ 
    replaceWhat = replaceWhat.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
    var re = new RegExp(replaceWhat, 'g'); 
    str.replace(re,replaceTo); 
} 

Is there a RegExp.escape function in Javascript?

+1

這並不如預期工作,如果replaceWhat包含正則表達式元字符,例如'*','+','''。 – pts

+0

@pts所以做了字面上的正則表達式。 – Barmar

+0

然後添加這個邏輯:[Javascript中是否有RegExp.escape函數?](http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript) – dc5