2012-05-15 40 views
213

我有多個逗號的字符串替換所有逗號和字符串替換方法只會更改第一個:JavaScript的 - 在一個字符串

var mystring = "this,is,a,test" 
mystring.replace(",","newchar", -1) 

結果"thisnewcharis,a,test"

文檔表示默認替換全部,並且「-1」也表示全部替換,但是不成功。有什麼想法嗎?

+1

什麼文件?標準 - http://es5.github.com/#x15.5.4.11 - 沒有定義第三個參數,MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ replace - 將非標準的第三個參數定義爲表示標誌的字符串,而不是整數... –

回答

457

您可以使用RegExp和g標誌。

var mystring = "this,is,a,test" 
mystring.replace(/,/g , "newchar"); 

DEMO:http://jsfiddle.net/d4N9s/

+1

優秀的答案。/g使逗號全局搜索並將其替換爲整個字符串。它以這種方式工作,我正確嗎? –

+0

您能否詳細介紹一下/「Seprator」/ g – MSTdev

+1

@MSTdev這是一個典型的*正則表達式*,帶有'g'標誌(a.k.a. *「全局搜索」*)。該算法很簡單:正則表達式查找給定字符串中的所有匹配(這裏是逗號)。有關JavaScript中正則表達式的更多信息,請參閱[** MDN **](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags)。 – VisioN

29
var mystring = "this,is,a,test" 
mystring.replace(/,/g, "newchar"); 

使用全局(g)標誌

Simple DEMO

+0

不適用於var mystring =「this,is.a.test」 mystring.replace(/./g,「>」);它替換整個字符串 –

+0

@DineshJain在正則表達式中('.')有一個特殊的含義,它意味着每個字符和所有其他特殊字符一樣,如果你想使用它們的值,就需要用'\'來轉義」。如果你只想替換點,你需要使用'\ .'。 – gdoron

+0

我添加String.prototype.replaceAll =函數(搜索,更換){ \t \t \t \t \t \t \t變種目標=此; \t \t \t \t \t \t \t return target.replace(new RegExp(search,'g'),replacement); \t \t \t \t \t \t};解決我的問題@gdoron謝謝 –

107

只是爲了好玩:

var mystring = "this,is,a,test" 
var newchar = '|' 
mystring = mystring.split(',').join(newchar); 
+0

這適用於帶有變量和特殊字符(例如:'['+ variable +']')的全局變量regex。天才。 –

+0

這是一個很好的答案,我測試了帶點替換功能。'但它沒有像預期的那樣工作,但你的回答很好 –

+1

@SrednyMCasanova這是因爲在正則表達式中,句點是一個特殊字符,你應該用'\ .'來轉義。例如:'var mystring =「this 。。。,是,一,試驗「; mystring.replace(/\./ g,「|」);'參見[MDN RegExp - 特殊字符在正則表達式中的含義](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /正則表達式#Special_characters_meaning_in_regular_expressions) –

相關問題