#javascript #regex
#javascript #регулярное выражение
Вопрос:
Это регулярное выражение соответствует всем символам между пробелами, если слово содержит PRP
.
Как я могу заставить его соответствовать всем словам или символам между пробелами, если они содержат PRP
, но не если они содержат me
в любом случае.
Так что сопоставьте все слова, содержащие PRP, но не содержащие ME или me.
Вот регулярное выражение для сопоставления слов, содержащих PRP: S*PRPS*
Комментарии:
1. можете ли вы предоставить некоторые входные данные вместе с ожидаемыми результатами?
Ответ №1:
Для этого вы можете использовать отрицательный прогноз:
(?:^|s)((?!S*?(?:ME|me))S*?PRPS*)
Рабочая демонстрация
PS: Используйте group #1
для вашего совпадающего слова.
Код:
var re = /(?:^|s)((?!S*?(?:ME|me))S*?PRPS*)/;
var s = 'word abcPRP def';
var m = s.match(re);
if (m) console.log(m[1]); //=> abcPRP
Комментарии:
1. спасибо, но он не работает на этом сайте тестирования регулярных выражений: regexr.com Я думаю, что есть непревзойденный паратезис
2. Проверьте последнее регулярное выражение и связанную демонстрацию.
3. на самом деле оно соответствует мне (PRP). Я хочу, чтобы оно соответствовало всем вещам, содержащим PRP, кроме me (PRP) или ME (PRP)
4. оно по-прежнему соответствует (PRP), даже если слово содержит me . Я хочу, чтобы оно ничему не соответствовало, если слово содержит меня. Вот ссылка: regex101.com/r/hR3mS2
5. большое вам спасибо! и последнее, оно также соответствует пробелу перед совпадением. Я хочу, чтобы оно соответствовало только символам между пробелами, исключая все пробелы, окружающие совпадение
Ответ №2:
Вместо того, чтобы использовать сложные регулярные выражения, которые могли бы сбить с толку практически любого, кто его читает, почему бы вам не разбить свой код на две части, разделив слова на массив и отфильтровав результаты с помощью ненужных вам материалов?
function prpnotme(w) {
var r = w.match(/S /g);
if(r == null)
return [];
var i=0;
while(i<r.length) {
if(!r[i].contains('PRP') || r[i].toLowerCase().contains('me'))
r.splice(i,1);
else
i ;
}
return r;
}
console.log(prpnotme('whattttttt ok')); // []
console.log(prpnotme('MELOLPRP PRPRP PRPthemeok PRPmhm')); // ['PRPRP', 'PRPmhm']
По очень веской причине, почему это важно, представьте, хотели ли вы когда-нибудь добавить больше логики. У вас гораздо больше шансов совершить ошибку при изменении сложного регулярного выражения, чтобы сделать его еще более сложным, и таким образом это делается с помощью простой логики, которая имеет смысл при чтении каждого предиката, независимо от того, сколько вы добавляете.