418

我有一个带有多个逗号的字符串,字符串替换方法只会更改第一个:

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

结果"thisnewcharis,a,test"

文档中表示默认全部替换,“-1”也表示全部替换,但是不成功。有什么想法吗?

4

3 回答 3

873

函数的第三个参数String.prototype.replace()从未被定义为标准,因此大多数浏览器根本不实现它。

最好的方法是使用带有( global ) 标志的正则表达式。g

var myStr = 'this,is,a,test';
var newStr = myStr.replace(/,/g, '-');

console.log( newStr );  // "this-is-a-test"

还有问题吗?

需要注意的是,正则表达式使用需要转义的特殊字符。例如,如果您需要转义点 ( .) 字符,则应使用/\./文字,因为在正则表达式语法中,点匹配任何单个字符(行终止符除外)。

var myStr = 'this.is.a.test';
var newStr = myStr.replace(/\./g, '-');

console.log( newStr );  // "this-is-a-test"

如果您需要将变量作为替换字符串传递,而不是使用正则表达式文字,您可以创建RegExp对象并将字符串作为构造函数的第一个参数传递。正常的字符串转义规则(包含在字符串中时的特殊字符之前\)将是必需的。

var myStr = 'this.is.a.test';
var reStr = '\\.';
var newStr = myStr.replace(new RegExp(reStr, 'g'), '-');

console.log( newStr );  // "this-is-a-test"

于 2012-05-15T23:58:44.670 回答
182

只是为了好玩:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);
于 2012-05-16T00:06:01.063 回答
51
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");

使用 global( g) 标志

简单的演示

于 2012-05-15T23:59:03.853 回答