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

Я пытаюсь найти регулярное выражение, которое скажет мне, содержит ли строка одно слово, но не другое.

По сути, мне нужно найти способ вернуть true для следующих

base?param1=value1&param2=value2

, но я хочу, чтобы он возвращал false, если любое из значений (или действительнолюбая часть строки содержит Debug

Так, например:

collect?e=checkout --> true
collect?e=Debug --> false

Мне нужно это как чистое регулярное выражение, так как я просто пытаюсь использовать его в сетевом фильтре Chrome.

Я пытался /(collect).+(?!Debug.)*/ но это не работает

Самое близкое, что я могу получить, это просто /(?!Debug.)*/ которыйопускает что-либо с Debug в строке, но не ограничивает его теми строками, которые содержат слово «collect»

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Попробуйте:

/(?<!Debug.*)collect(?!.*Debug)/

По сути, это говорит о том, что вы должны соответствовать collect только если оно не следует за строкой, содержащей Debug, и если за ней не следует строка, содержащая Debug.

0 голосов
/ 07 ноября 2019

Использование (collect).+(?!Debug.) не будет работать должным образом, потому что вы сначала сопоставите collect, а затем .+ будет соответствовать любому символу 1+ раз до конца строки.

Тогда, когда вы находитесь в конце, это утверждение (?!Debug.) будет верным, потому что нет ничего справа, как вы находитесь в конце.

То, что вы могли бы поставить точку, совпадает collect?e= и затем утверждают, что то, что прямо справа, не является Отладкой.

collect\?e=(?!Debug\b)

Regex demo

0 голосов
/ 07 ноября 2019

Я думаю, что вы можете заставить свой негативный взгляд работать так, как вам хотелось бы, переместив «. +» Так, чтобы он был после «?!»

Другими словами, поскольку вы пытаетесьчтобы соответствовать слову «собирать», если за ним не следует слово «отладка» после любого (ненулевого) числа символов, вы можете получить его с помощью следующего выражения:

/collect(?!.+Debug).*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...