2013-10-25 70 views
4

我有下面的代碼在javascript:更換的JavaScript功能不工作

csvReport.name = "My New Report"; 
$scope.filename = csvReport.name.replace(" ", "_"); 

,但我得到$scope.filename = My_New Report。並非所有的空間都替代

這是什麼?

+0

你爲什麼標籤這個'performance'? – crashmstr

+0

以下所有答案都是正確的,但沒有一個作者喜歡upvote其他正確的......這有點令人失望:( –

回答

5

.replace會經常更換,除了第一次出現,如果你使用正則表達式這樣的:

csvReport.name.replace(/ /g, "_"); 
+0

Thanks!It Works!:) – IFrizy

4

您可以使用正則表達式與全球開關(g)實際上全部更換的情況下,像這樣:

csvReport.name = "My New Report"; 
$scope.filename = csvReport.name.replace(/ /g, "_"); 
2

功能replace只替換第一個參數的第一個外觀。您可以使用正則表達式來替換整個字符串。

試試這個:

if (!String.replaceAll) { 
    String.prototype.replaceAll = function(replace, value) { 
     var regexpStr = replace.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") 
     return this.replace(new RegExp(regExpStr, 'g'), value); 
    }; 
} 

這種方式,你有一個對整個字符串工作方式的其他功能。

+1

這項工作的空間,但它是危險的,如果他想替換像''的字符。 ''因爲'。'表示regExp中的每個字符,但是你可以用正則表達式在函數中轉義,或者在調用函數時將其轉義:'.replaceAll('\\。','_')' –

+0

@ Karl-AndréGagnon我修改了我的答案,爲'regexp'特殊字符添加了轉義'replace'字符串。 – maketest