#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]}`);
нашел решение