Как удалить слово с лишним разделителем из заданной строки? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть следующая строка.

var str = "abc, abcd, abc, abcf, abc, abc";

Я хочу удалить abc из заданной строки с помощью , (space). По сути, я хочу вывести что-то вроде ниже.

var output = "abcd, abcf";

Примечание: - По возможности дать решение для регулярных выражений (только с одной заменой).

Вещи, которые я пробовал: -

1) 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) 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 голосов
/ 17 сентября 2018

Использование одного 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);
0 голосов
/ 18 сентября 2018

Есть еще два способа сделать выше.

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);
0 голосов
/ 17 сентября 2018

Вы можете использовать этот .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 на завершающий ", ".
  • Мы эффективно используем это регулярное выражениеfirst: /\babc(?:, |$)/
  • Во втором вызове .replace мы удаляем все оставшиеся конечные ", " в строке.
  • Мы эффективно используем это регулярное выражение во второй раз: /, $/, чтобы удалить любыеосталось ", "

Тест производительности Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...