JavaScript - Replace all commas in a string
我有一个带有多个逗号的字符串,字符串替换方法将只更改第一个逗号:
1 2
| var mystring ="this,is,a,test"
mystring.replace(",","newchar", -1) |
结果:"thisnewcharis,a,test"。
文档显示默认值将全部替换,而"-1"也表示全部替换,但它不成功。有什么想法吗?
- 什么文件?标准-es5.github.com/x15.5.4.11-未定义第三个参数,mdn-developer.mozilla.org/en/javascript/reference/global_objects‌&8203;/…-将非标准第三个参数定义为表示标志的字符串,而不是整数…
String.prototype.replace()函数的第三个参数从来没有被定义为标准,所以大多数浏览器根本不实现它。
最好的方法是使用带有EDOCX1(global)标志的正则表达式。
1 2 3 4
| var myStr = 'this,is,a,test';
var newStr = myStr.replace(/,/g, '-');
console.log( newStr ); //"this-is-a-test" |
还有问题吗?
需要注意的是,正则表达式使用需要转义的特殊字符。例如,如果需要转义点(.字符,则应使用/\./字面值,就像在regex语法中,点匹配任何单个字符(行终止符除外)。
1 2 3 4
| var myStr = 'this.is.a.test';
var newStr = myStr.replace(/\./g, '-');
console.log( newStr ); //"this-is-a-test" |
如果需要将变量作为替换字符串传递,则可以创建RegExp对象,而不是使用regex文本,并将字符串作为构造函数的第一个参数传递。正常的字符串转义规则(在字符串中包含\的特殊字符之前)是必需的。
1 2 3 4 5
| var myStr = 'this.is.a.test';
var reStr = '\\.';
var newStr = myStr.replace(new RegExp(reStr, 'g'), '-');
console.log( newStr ); //"this-is-a-test" |
- 回答得很好。/G对逗号进行全局搜索并将其替换为整个字符串。它是这样工作的,对吗??
- 您能详细描述一下/separator/g吗?
- @mstdev这是一个典型的带有g标志的正则表达式(也称为"全局搜索")。算法很简单:正则表达式查找给定字符串中的所有匹配项(此处为逗号)。有关JavaScript中正则表达式的更多信息,可以在MDN中找到。
- 不在typescript中工作。
- 如果我需要替换""呢?
- @chows2603使用/\\/g就可以了。
- 如果我想全部删除/从我的字符串中删除怎么办?
- @安娜没有什么特别的,也要逃避它:埃多克斯1〔2〕。
- @视觉谢谢
只是为了好玩:
1 2 3
| var mystring ="this,is,a,test"
var newchar = '|'
mystring = mystring.split(',').join(newchar); |
- 它与regex、globaly、变量和特殊字符(例如:'['+variable+']')一起工作。天才。
- 这是一个很好的答案,我用圆点测试了replace函数,但它并没有按预期工作,但你的回答使它很好。
- @srednymcasanova,这是因为在regex中,句点是一个特殊字符,您应该用\.来转义它。示例:var mystring ="this.,.is.,.a.,.test"; mystring.replace(/\./g ,"|");参见mdn regexp—正则表达式中的特殊字符含义。
- 它比regex和/g慢/快吗?
1 2
| var mystring ="this,is,a,test"
mystring.replace(/,/g,"newchar"); |
使用全局(g标志
简单演示
- 不适用于var mystring="this,is.a.test"mystring.replace(//g,">");它将替换整个字符串
- @在regex dot中dineshjain(.有一个特殊的含义,它意味着每个char,和其他所有特殊char一样,都需要用` if you want to use their value"literally". if you want to replace only dots you need to use 逃逸。
- 我添加了string.prototype.replaceall=function(search,replacement)var target=this;返回target.replace(new regexp(search,'g'),replacement);解决我的问题@gdoron谢谢