JavaScript的替换函数无法正常工作。

4

我在JavaScript中有以下代码:

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

但是我得到了$scope.filename = My_New Report。并没有替换所有空格。

这是什么意思?


你为什么打上了“性能”这个标签? - crashmstr
所有下面的答案都是正确的,但没有一个作者关心给其他正确答案点赞...这有点令人失望 :( - Zathrus Writer
4个回答

5

5
.replace 方法总是只替换第一次出现的内容,除非你使用正则表达式来实现全局替换,例如这样:
csvReport.name.replace(/ /g, "_");

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
这段代码可以用于替换空格,但是如果想要替换像 . 这样的字符就很危险,因为在正则表达式中 . 代表任意字符。不过你可以在函数中使用正则表达式进行转义,或者在调用函数时对其进行转义:.replaceAll('\\.', '_') - Karl-André Gagnon
@Karl-AndréGagnon 我已经修改了我的答案,添加了转义 replace 字符串以处理 regexp 特殊字符。 - maketest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接