非常简单的小问题,但我不太明白如何去做。
我需要用空格替换“_”的每个实例,并将“#”的每个实例替换为空/空。
var string = '#Please send_an_information_pack_to_the_following_address:';
我试过这个:
string.replace('#','').replace('_', ' ');
我真的不喜欢像这样链接命令。有没有另一种方法可以做到这一点?
非常简单的小问题,但我不太明白如何去做。
我需要用空格替换“_”的每个实例,并将“#”的每个实例替换为空/空。
var string = '#Please send_an_information_pack_to_the_following_address:';
我试过这个:
string.replace('#','').replace('_', ' ');
我真的不喜欢像这样链接命令。有没有另一种方法可以做到这一点?
使用 OR 运算符 ( |
):
var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"
您还可以使用字符类:
str.replace(/[#_]/g,'');
如果你想用一个东西替换散列,用另一个替换下划线,那么你只需要链接。但是,您可以添加原型:
String.prototype.allReplace = function(obj) {
var retStr = this;
for (var x in obj) {
retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
}
return retStr;
};
console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';
不过,为什么不连锁呢?我看不出有什么问题。
如果你想替换多个字符,你可以调用String.prototype.replace()
替换参数是一个为每个匹配调用的函数。您所需要的只是一个表示您将在该函数中使用的字符映射的对象。
例如,如果你想a
与更换x
,b
与y
和c
与z
,你可以这样做:
var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
输出:234xyz567yyyyxz
链接很酷,为什么要忽略它?
无论如何,这是一次替换的另一种选择:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
如果匹配==“#”,则替换将选择“”,否则将选择“”。
[更新] 对于更通用的解决方案,您可以将替换字符串存储在一个对象中:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
/g
在正则表达式上指定(全局)标志以替换所有匹配项,而不仅仅是第一个:
string.replace(/_/g, ' ').replace(/#/g, '')
要将一个字符替换为一件事,将不同的字符替换为另一件事,您真的无法绕过需要两次单独调用replace
. 您可以像 Doorknob 那样将其抽象为一个函数,但我可能会让它采用带有旧/新的对象作为键/值对而不是平面数组。
我不知道这有多大帮助,但我想从我的字符串中删除<b>
和</b>
所以我用
mystring.replace('<b>',' ').replace('</b>','');
所以基本上如果你想减少有限数量的字符并且不要浪费时间,这将是有用的。