我有一个有多个逗号的字符串,字符串替换方法只会改变第一个:
var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)
结果:“thisnewcharis,测试”
文档指出,默认值将替换所有,“-1”也表示替换所有,但不成功。任何想法吗?
我有一个有多个逗号的字符串,字符串替换方法只会改变第一个:
var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)
结果:“thisnewcharis,测试”
文档指出,默认值将替换所有,“-1”也表示替换所有,但不成功。任何想法吗?
当前回答
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");
使用全局(g)标志
简单的演示
其他回答
String.prototype.replace()函数的第三个参数从未被定义为标准,因此大多数浏览器根本不实现它。它最终被删除并替换为String.prototype.replaceAll()(见下文)。
现代解决方案(2022年)
使用String.prototype.replaceAll()。现在所有浏览器和NodeJS都支持它。
var myStr = “this,is,a,test”; var newStr = myStr.replaceAll(“,”, “-”); console.log( newStr ); “这是一个测试”
旧的方法是使用带有g(全局)标志的正则表达式
var myStr = “this,is,a,test”; var newStr = myStr.replace(/,/g, “-”); console.log( newStr ); “这是一个测试”
正则表达式有问题吗?
需要注意的是,正则表达式使用需要转义的特殊字符。例如,如果你需要转义一个点(.)字符,你应该使用/\。在regex语法中,点匹配任何单个字符(行结束符除外)。
如果需要将一个变量作为替换字符串传递,可以创建一个RegExp对象并将一个字符串作为它的第一个参数,而不是使用regex文字。通常的转义规则(当包含在字符串中时,在特殊字符前面加上\)是必要的。
函数escapeRegex(str) { 返回str.replace (/[.*+?^${}()|[\]\\]/ g , "\\$&");// $&表示整个匹配的字符串 } var myStr = "this.is.a.test"; var reStr = escapeRegex("."); var newStr = myStr。replace(new RegExp(reStr, "g"), "-"); console.log(newStr);“这是一个测试”/ /
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");
使用全局(g)标志
简单的演示
只是为了好玩:
var mystring = "this,is,a,test"
var newchar = '|'
mystring = mystring.split(',').join(newchar);