正则表达式匹配以" / api"开头的所有内容但没有完成" .jpg"或者"统计数据"

时间:2016-11-22 12:52:09

标签: regex google-chrome google-chrome-devtools

我需要使用正则表达式与Chrome的网络日志一起使用才能显示除两个特定终端之外的API调用:

例:

我想展示包含/api/的所有内容:

http://localhost:8081/api/software-features
http://localhost:8081/api/user-groups/logged-user-group
http://localhost:8081/api/user-groups/%7B4D7E2585-32E3-4794-A0F3-4FE7D56D27AE%7D/permissions/system
http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras
etc...

除非以/image-640x480.jpg/statistics结尾:

http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras/0/streams/0/statistics
http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras/0/streams/0/image-640x480.jpg

前端不断请求这两个,并在日志中产生噪音。

3 个答案:

答案 0 :(得分:1)

要匹配以/api开头而不是以几个替代品结尾的字符串,您需要使用带有负面外观的正则表达式:

^/api(?!.*(?:[.]jpg|statistics)$)

<强>详情:

  • ^ - 字符串的开头
  • /api - 字符串开头的文字文字
  • (?!.*(?:[.]jpg|statistics)$) - 如果在/api之后除了换行符号之外还有0个字符并且有.jpg[.]jpg)或( |statistics位于字符串末尾($)。

答案 1 :(得分:1)

不是正则表达式,但我相信它解决了这个问题:

(str.search(/\/api/i) >=0 && str.search(/\.jpg/i) == -1 && str.search(/\/statistics/i) == -1 )

在你的样品上试试这个:

const urls = [
  "http://localhost:8081/api/software-features",
  "http://localhost:8081/api/user-groups/logged-user-group",
  "http://localhost:8081/api/user-groups/%7B4D7E2585-32E3-4794-A0F3-4FE7D56D27AE%7D/permissions/system",
  "http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras",
  "http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras/0/streams/0/statistics",
  "http://localhost:8081/api/servers/%7B499C3279-CD5D-402E-A60B-6AE0B5A21EE0%7D/cameras/0/streams/0/image-640x480.jpg"
];

console.log([for (url of urls) (url.search(/\/api/i) >=0 && url.search(/\.jpg/i) == -1 && url.search(/\/statistics/i) == -1 )])

// Array [ true, true, true, true, false, false ]

答案 2 :(得分:1)

您也可以尝试this regex,它适用于大多数正则表达式引擎

bytes
  • ^.*\/api\/(?!.*(?:\.jpg|statistics)$).*$ 匹配字符串的开头
  • ^匹配.*\/api\/以及
  • 之前的所有内容
  • \api\这是一个负面预测,如果下一个字符是(?!.*(?:\.jpg|statistics)$)后跟.*.jpg以及字符串结尾
  • statistics匹配.*$之后的所有内容,以防否定前瞻不匹配