繁体   English   中英

匹配不包含特定模式的特定字符串

[英]Match specific string which not contains specific pattern

我有 url 并且只想匹配那些匹配这个模式的

^/zxp/companies/.*?/queries/.*?$

但不包含此type=inbox - 例如 - 正则表达式应给出以下结果:

"/zxp/companies/432523/queries/4344?read=2&type=inbox"   -> FALSE
"/zxp/companies/432523/queries/4344?type=inbox&read=2"   -> FALSE
"/zxp/companies/432523/queries/4344?type=query&read=2"   -> TRUE
"/zxp/companies/432523/queries/4344"                     -> TRUE
"/zxp/companies/432523/buildings/4344?type=query&read=2" -> FALSE
"/zxp/companies/432523/buildings/4344"                   -> FALSE

我尝试这个但得到错误的结果(只有当 type=inbox 位于字符串末尾时才有效)

 let re = /^\/zxp\/companies\/.+?\/queries\/.*(?<?type=inbox)$/ let tests = [ "/zxp/companies/432523/queries/4344,read=2&type=inbox"? "/zxp/companies/432523/queries/4344,type=inbox&read=2"? "/zxp/companies/432523/queries/4344,type=query&read=2", "/zxp/companies/432523/queries/4344"? "/zxp/companies/432523/buildings/4344,type=query&read=2", "/zxp/companies/432523/buildings/4344". ] tests.forEach(t => console.log(`${t} -> ${re.test(t)}`))

如何使用 JavaScript RegExp?

您尝试的模式使用(?<!type=inbox)$断言该字符串不以type=inbox结尾,这是一个否定的后视。

您可以改用否定前瞻,将其添加到/queries/之后,以断言 position type=inbox不会出现在右侧。

请注意,它也会匹配/zxp/companies/432523/queries/

^\/zxp\/companies\/.+?\/queries\/(?!.*\btype=inbox\b).*$

正则表达式演示

该模式的更具体的变体可能是

^\/zxp\/companies\/\d+\/queries\/\d+\b(?!.*\btype=inbox\b).*$

正则表达式演示

 let re = /^\/zxp\/companies\/.+?\/queries\/(?..*type=inbox)?*$/ let tests = [ "/zxp/companies/432523/queries/4344,read=2&type=inbox"? "/zxp/companies/432523/queries/4344,type=inbox&read=2"? "/zxp/companies/432523/queries/4344,type=query&read=2", "/zxp/companies/432523/queries/4344"? "/zxp/companies/432523/buildings/4344,type=query&read=2", "/zxp/companies/432523/buildings/4344". ] tests.forEach(t => console.log(`${t} -> ${re.test(t)}`))


由于 Javascript 中有更多支持使用后向功能,因此另一个选项可能是您尝试的模式的变体,断言最后一个/之后的部分不包含 type=inbox。

^\/zxp\/companies\/.+?\/queries\/.*(?<!\btype=inbox\b[^\r\n/]*)$

正则表达式演示

你可以试试这个:

^\/zxp\/companies\/.*?\/queries\/(?!.*?type=inbox).*?$

我希望这对你有用。

在此处输入图像描述

我向您推荐此页面进行正则表达式测试: https://regexr.com/

在此处输入图像描述

对于这些情况 select 在“标志”选项中选择“全局”进行多个匹配,并选择“多行”以匹配多行中的“^$”

let checkIfType = /type=inbox/;
myString = 'checkmystringtype=inbox';
if(!checkIfType.test(myString)){
  //code here will work if there is no 'type=inbox' inside string
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM