如何使用正则表达式确定字符串是否包含一个子字符串而不包含其他子字符串?

我正在尝试找到一个正则表达式,该表达式可以告诉我字符串是否包含一个单词而不包含另一个单词。

基本上,我需要找到以下方法返回true的方法

base?param1=value1&param2=value2

但是我希望它在任何值(或者实际上,字符串的任何部分包含Debug

时返回false)

例如:

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

我需要使用它作为干净的正则表达式,因为我只是想在Chrome网络过滤器中使用它。

我尝试过 /(collect).+(?!Debug.)*/,但这不起作用

我能得到的最接近的就是/(?!Debug.)*/,它在字符串中省略了Debug的任何内容,但并不限于包含单词“ collect”的字符串

abiaoa 回答:如何使用正则表达式确定字符串是否包含一个子字符串而不包含其他子字符串?

我认为您可以通过移动“。+”使其位于“?!”之后来使您的否定前瞻以您想要的方式工作。

换句话说,由于您尝试匹配在不包含任何数量(非零)字符的情况下不带“调试”一词的“收集”一词,因此您可以使用以下表达式获得该信息:

/collect(?!.+Debug).*/
,

尝试:

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

基本上,这就是说,如果collect不跟随包含Debug的字符串,并且不跟随Debug的字符串,则应该匹配。

,

使用(collect).+(?!Debug.)不能按预期工作,因为您首先匹配collect,然后.+将匹配任何char 1+次,直到字符串末尾。

然后,当您处于结尾时,该断言(?!Debug.)将是正确的,因为与结尾处一样,右边没有任何内容。

您可以点匹配collect?e=,然后断言直接在右边的不是Debug。

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

Regex demo

本文链接:https://www.f2er.com/3148067.html

大家都在问