我有以下字符串。
var str = "abc, abcd, abc, abcf, abc, abc";
我想用abc
从给定的字符串中删除, (space)
。基本上,我想输出类似下面的内容。
var output = "abcd, abcf";
注意:-如果可能,请提供正则表达式解决方案(仅替换一个)。
我尝试过的事情:-
1)第一种方法
var str = "abc, abcd, abc, abcf, abc, abc";
var w = "abc";
var output = str.split(", ").filter(x => !(x === w)).join(", ");
console.log(output);
在这里,我使用了split
,然后是filter
,然后是join
,基本上是3个数组操作。 (就性能而言,我认为不好)。
2)第二种方法
var str = "abc, abcd, abc, abcf, abc, abc";
var w = "abc";
var regex = new RegExp("\\b" + w + "\\b", "ig");
var output = str.replace(regex,"");
output = output.replace(/, , /ig,", ");
output = output.replace(/^, |, $/ig,"");
console.log(output);
这里我使用了三遍replace
。
有可能以更简单的方式实现吗?
答案 0 :(得分:4)
您可以使用以下.replace
代码:
var w = 'abc';
var str = "abc, abcd, abc, abcf, abc, abc";
str = str.replace(new RegExp("\\b" + w + "(?:, |$)", "g"), '')
.replace(/, $/, '');
console.log(str);
//=> "abcd, abcf"
.replace
呼叫中,我们将单词abc
替换为结尾的", "
。/\babc(?:, |$)/
.replace
调用中,我们删除了字符串中所有剩余的尾随", "
。/, $/
删除", "
上剩余的所有内容答案 1 :(得分:2)
使用一个replace()
var str = "abc, abcd, abc, abcf, abc, abc";
var rep = "abc";
var r = new RegExp("(, "+rep+"(?![a-z]))|("+rep+"(?![a-z]), )","g");
str = str.replace(r, "");
console.log(str);
答案 2 :(得分:0)
以上还有两种方法。
1)使用单个.replace()
var str = "abc, abcd, abc, abcf, abc, abc";
var w = "abc";
var regex = new RegExp(", " + w + "\\b", "g");
var output = (", " + str).replace(regex,"").substr(2);
console.log(output);
2)使用.reduce()
var str = "abc, abcd, abc, abcf, abc, abc";
var w = "abc";
var output = str.split(", ").reduce((a, x, i) => {
if(x !== w){
a = a + ", "+ x;
}
return a;
},'').substr(2);
console.log(output);