js Удаляет часть из параметра, который не соответствует шаблону

#javascript #regex #replace

#javascript #регулярное выражение #заменить

Вопрос:

 const regex = /[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/gm;
let m;

while ((m = regex.exec(tweet.text)) !== null) {
let newClass = tweet.text.replace(/[^1-9a-zA-Z]{3}-[^1-9a-zA-Z]{3}-[^1-9a-zA-Z]{3}/g, '');
console.log(`Found match: ${newClass}`);
};
  

когда tweet.text = "123.qwe.456 test" я все еще получаю тот же результат, но я хочу удалить все, что не соответствует шаблону

/[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/

есть идеи?

Комментарии:

1. Мы видим регулярное выражение, которое вы написали, но что такое «шаблон», который вы пытаетесь исключить? То есть вы получаете "123.qwe.456 test" , какую часть этого вы хотите исключить? Каков желаемый результат?

2. Строка, поэтому входные данные являются переменными. Это означает, что «тест» должен быть заменен ничем. Я хочу заменить все, кроме соответствующей строки, ничем.

Ответ №1:

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

 const regex = /([1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3})/
let match = tweet.text.match(regex)
tweet.text = match[1]
  

Ответ №2:

Вместо замены вы можете получить совпадение вместо

 b[1-9a-zA-Z]{3}([-.])[1-9a-zA-Z]{3}1[1-9a-zA-Z]{3}b
  

Объяснение

  • b Граница слова
  • [1-9a-zA-Z]{3} Сопоставьте 3 раза любой из перечисленных (обратите внимание, что 1-9 не соответствует 0)
  • ([-.]) Захват в группе 1 либо - или .
  • [1-9a-zA-Z]{3} Сопоставьте 3 раза любой из перечисленных
  • 1 Обратная ссылка на группу 1, соответствует той же, что и в группе 1
  • [1-9a-zA-Z]{3} Сопоставьте 3 раза любой из перечисленных
  • b Граница слова

Демонстрация регулярных выражений

Ответ №3:

 const regex = /[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}-[1-9a-zA-Z]{3}/gm;
let m;

while ((m = regex.exec(tweet.text)) !== null) {
console.log(`Found match: ${m[0]}`);
  

нашел решение