如何从给定的字符串中删除带有额外定界符的单词?

时间:2018-09-17 14:38:32

标签: javascript regex replace

我有以下字符串。

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

有可能以更简单的方式实现吗?

3 个答案:

答案 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调用中,我们删除了字符串中所有剩余的尾随", "
  • 我们第二次有效使用此正则表达式:/, $/删除", "上剩余的所有内容

Performance Test Link

答案 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);