2012-03-09 28 views
4

每次我看到相當多的文章或質疑說,只需使用:如何創建一個字符串「全部替換」功能?

str.replace(/yourstring/g, 'whatever'); 

但我想代替「yourstring」使用一個變量。然後人們說,只需使用new RegExp(yourvar, 'g')。這個問題是,yourvar可能包含特殊字符,我不希望它被視爲一個正則表達式。

那麼我們該怎麼做到這一點呢?


示例輸入:

'a.b.'.replaceAll('.','x') 

希望的輸出:

'axbx' 
+0

你要這樣對待像正則表達式正則表達式?你能定義你想提供的輸入類型嗎?你想要的是正則表達式的功能,還是僅僅是一串文字字符,「ABc34 * \ d/4h」'你想使用/替換? – 2012-03-09 21:53:45

+0

@DavidThomas:任何輸入。我想要的只是一個簡單的函數,它將「x」的所有*實例替換爲「y」,而不僅僅是第一個,就像'string.replace'一樣。 – mpen 2012-03-09 21:59:32

+1

''a.b.c'.split('。')。join('x')' – david 2012-03-09 22:14:39

回答

7

您可以拆分並加入。

var str = "this is a string this is a string this is a string"; 

str = str.split('this').join('that'); 

str; // "that is a string that is a string that is a string"; 
+0

這個解決方案似乎要快得多,所以你得到了檢查,不會想到這麼做,謝謝。 – mpen 2012-03-10 02:03:13

1

可以逃避你yourvar變量使用下面的方法:

function escapeRegExp(text) { 
    return text.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
} 
+0

我認爲你在反斜槓上有點過分。當在一個字符集裏面時,你不需要逃避太多。儘管如此,這是一個可行的解決方案。 +1 – mpen 2012-03-09 22:02:07

1

XRegExp提供A F用於逃避字符串中的正則表達式字符:

var input = "$yourstring!"; 
var pattern = new RegExp(XRegExp.escape(input), "g"); 
console.log("This is $yourstring!".replace(pattern, "whatever")); 
// logs "This is whatever" 
+0

我並不是真的想要整個圖書館,所以我通過源代碼挖掘出來:'n​​ativ.replace.call(str,/[-[\]{}()*+?.,\\^$|# \ s]/g,「\\ $ &");'圖書館的外觀看起來很整齊 – mpen 2012-03-09 22:17:25

0

溶液1

RegExp.escape = function(text) { 
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 
} 

String.prototype.replaceAll = function(search, replace) { 
    return this.replace(new RegExp(RegExp.escape(search),'g'), replace); 
}; 

溶液2

'a.b.c.'.split('.').join('x'); 

jsPerf Test