2013-10-25 45 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