JavaScript - 替换字符串中的所有逗号

mik*_*ike 348 javascript string replace substitution

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

var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)
Run Code Online (Sandbox Code Playgroud)

结果:"thisnewcharis,a,test"

文档指出默认值替换all,并且"-1"也表示替换all,但是不成功.有什么想法吗?

Vis*_*ioN 733

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

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

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

console.log( newStr );  // "this-is-a-test"
Run Code Online (Sandbox Code Playgroud)

还有问题吗?

值得注意的是,正则表达式使用需要转义的特殊字符.例如,如果你需要转义一个dot(.)字符,你应该使用/\./literal,就像在regex语法中一个点匹配任何单个字符(行终止符除外).

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

console.log( newStr );  // "this-is-a-test"
Run Code Online (Sandbox Code Playgroud)

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

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

console.log( newStr );  // "this-is-a-test"
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案./ g进行全局搜索逗号并将其替换为整个字符串.它以这种方式工作,我是否正确? (3认同)
  • @ chows2603使用`/ \\ / g`它将起作用。 (3认同)

Rob*_*obG 159

纯娱乐:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);
Run Code Online (Sandbox Code Playgroud)

  • @SrednyMCasanova,因为在正则表达式中,句点是一个特殊字符,你应该用`\ .`来转义它.例如:`var mystring ="this.,.is.,.a.,.test"; mystring.replace(/\ ./ g,"|");`参见[MDN RegExp - 正则表达式中的特殊字符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /正则表达式#Special_characters_meaning_in_regular_expressions) (4认同)
  • 它比带有 /g 的正则表达式慢/快吗? (3认同)
  • 这适用于没有正则表达式,全局变量和特殊字符(例如:'['+variable+']')。天才。 (2认同)

gdo*_*ica 47

var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");
Run Code Online (Sandbox Code Playgroud)

使用global(g)标志

简单的演示

  • @DineshJain 在正则表达式点 (`.`) 中有一个特殊的含义,它意味着每个字符,和所有其他特殊字符一样,如果你想“字面上”使用它们的值,需要用 `\` 转义。如果你只想替换点,你需要使用`\.`。 (2认同)