我需要使用正则表达式与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
前端不断请求这两个,并在日志中产生噪音。
答案 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
匹配.*$
之后的所有内容,以防否定前瞻不匹配