2014-01-30 75 views
-3

爲什麼replace函數不能代替所有的事件?JavaScript字符串替換的行爲

1)防爆不起作用:

//the funcion call 
'999.999.999,00'.replace('.', '') 

//This replaces only the first match, given as result as below 
'999999.999,00' 

2)例這樣的作品,但使用正則表達式:

//the funcion call 
'999.999.999,00'.replace(/\./g, '') 

//This replaces all matches, given as result as below 
'999999999,00' 

是否適合例1?這是replace的正確行爲嗎?

+6

這是預期的行爲。 – Pointy

+0

這就是它的工作原理,查看文檔。 –

+1

有點讀取替換可能已經回答你的問題 – Huangism

回答

1

是的。 JavaScript替換應該只替換第一個匹配項。如果你想替換多個相同的字符串,你應該使用正則表達式。你也可以使用一個簡單的while循環:

var match = '.'; 
var str = '999.999.999,00'; 
while(str.indexOf(match) != -1) str = str.replace(match, ''); 

但通常只是使用正則表達式更容易。 while loops can be faster though。對於需要在大量文本上執行的簡單替換操作,這可能是相關的。對於更小的替換動作,使用Regex就好了。

2

在你的第一個情況下,你應該通過標誌作爲第三PARAM:

'999.999.999,00'.replace('.', '', 'g') 

更多信息,你可以找到MDN。然而,這不是所有瀏覽器都支持的,您應該自行承擔風險。

+5

並非所有瀏覽器都支持該第三個參數。它在Chrome中不起作用。更好地使用正則表達式。 –

+0

@RocketHazmat你是對的。更新了我的答案。 – antyrat