Как я могу опустить определенные строки из регулярного выражения заменить? - PullRequest
3 голосов
/ 25 сентября 2019

Мне нужно перебрать веб-адреса и удалить расширение домена, ЕСЛИ веб-адрес не соответствует чему-то конкретному.На этом этапе я хочу полностью игнорировать это совпадение.Я делаю это в Google Apps Script, поэтому в нем могут отсутствовать некоторые новые функции Javascript.

Я начал с основ, которые прекрасно работают.

source.replace(/(\.\S+\b)/gi,"")

Теперь я хочу игнорировать расширение, если вся строка: cars.com.

[abc.com, yahoo.com, amazon.com, cars.com]
becomes
[abc, yahoo, amazon, cars.com]

У меня очень мало опыта работы с предвидением / спиной, и в этом моя проблема.Следующая попытка все еще удаляет расширение из «cars.com».

source.replace(/(?<!cars\S+)(\.\S+\b)/gi,"")

Я почти уверен, что понимаю, почему, я просто не уверен, как это исправить.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Ваше регулярное выражение может стать действительно длинным, если у вас есть множество игнорируемых URL-адресов, вы можете иметь массив игнорируемых URL-адресов, отобразить массив URL-адресов и применять регулярное выражение только в том случае, если URL-адрес не следует игнорировать:

const urls = ["abc.com", "yahoo.com", "amazon.com", "cars.com"];
const ignore = ["cars.com", "other.com"];

const result = urls.map(url => {
  return ignore.includes(url) ? url : url.replace(/(\.\S+\b)/gi, "");
});

console.log(result);
2 голосов
/ 25 сентября 2019

Вы можете использовать регулярное выражение с отрицательным прогнозом и группой захвата:

/\b(?!cars\.com\b)([\w-]+)\.[\w-]+/

Демонстрация RegEx

Подробности RegEx:

  • \b: граница слова совпадения
  • (?!cars\.com\b): отрицательный взгляд на будущее, чтобы отбросить совпадение, у нас впереди cars.com
  • ([\w-]+)\.[\w-]+: совпадениестрока в foo.bar формате и часть захвата перед точкой в ​​группе захвата # 1
  • '\1' используется в замене , чтобы вернуть первую часть в замещенную строку.

Код:

const arr = ['abc.com',
  'yahoo.com',
  'amazon.com',
  'cars.com'];
  
const re = /\b(?!cars\.com\b)([\w-]+)\.[\w-]+/;

arr.forEach(el => {
  console.log( el, '=>', el.replace(re, '\1') );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...