Нужно заменить строку из длинной строки в javascript - PullRequest
1 голос
/ 10 января 2020

У меня есть длинная строка

Full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
removable_str2 = 'ab@xyz.com;';

Мне нужно заменить строку, которая будет иметь результирующую конечную строку должна выглядеть следующим образом,

cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

Я пытался с

str3 = Full_str1.replace(new RegExp('(^|\\b)' +removable_str2, 'g'),"");

но это привело к

cab@xyz.com;c-c.c_ab@xyz.com;

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Здесь решение, использующее два разделенных регулярных выражения для каждого случая:

  • строка для удаления находится в начале строки
  • строка для удаления находится внутри или в конце строки

PS : я не смог выполнить это в одном регулярном выражении, потому что он удалил бы лишний ; в случае сопоставления строки для удаления внутри глобальная строка.

const originalStr = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;ab@xyz.com;c_ab@xyz.com;';
const toRemove = 'ab@xyz.com;';

const epuredStr = originalStr
                      .replace(new RegExp(`^${toRemove}`, 'g'), '')
                      .replace(new RegExp(`;${toRemove}`, 'g'), ';');

console.log(epuredStr);
1 голос
/ 10 января 2020

Во-первых, часть Dynami c должна быть с экранированием , в противном случае . будет соответствовать любому символу, кроме символа разрыва строки, и будет совпадать также с ab@xyz§com;.

Далее вам нужно сопоставить это только в начале строки или после ;. Итак, вы можете использовать

var Full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
var removable_str2 = 'ab@xyz.com;';
var rx = new RegExp("(^|;)" + removable_str2.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "g");
console.log(Full_str1.replace(rx, "$1"));
// => cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

Замените "g" на "gi" для сопоставления без учета регистра.

См. Демонстрационную версию regex . Обратите внимание, что (^|;) соответствует и захватывает в Группу 1 начало расположения строки (пустая строка) или ; и $1 в шаблоне замены восстанавливает этот символ в результате.

ПРИМЕЧАНИЕ : Если шаблон известен заранее и вы хотите обрабатывать только шаблон ab@xyz.com;, используйте литерал регулярного выражения без экранирования, Full_str1.replace(/(^|;)ab@xyz\.com;/g, "$1").

0 голосов
/ 10 января 2020

Я не нахожу какого-либо конкретного описания, почему вы не пробовали так, это даст вам желаемый результат cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;

const full_str1 = 'ab@xyz.com;cab@xyz.com;c-ab@xyz.com;c.ab@xyz.com;c_ab@xyz.com;';
const removable_str2 = 'ab@xyz.com;';

const result= full_str1.replace(removable_str2 , "");

console.log(result);
...