我正在使用javascript正则表达式引擎,并且在使用正则表达式时遇到了困难:

这是一个示例(这是我必须匹配的丑陋的js脚本提取):

{data = function() {[{id:"1441-aeze",name:"theme1"},{id:"1441-aezb",name:"theme2"},{id:"1441-aezc",name:"theme3-a"},{id:"1441-aezd",name:"theme1-mtr"},{id:"1441-aezf",name:"theme4"}]}}


我的正则表达式尝试:

id:"([^"]+)",name:"(?![^"]*mtr$)[^"]*"


匹配组1的预期结果:

Match[1] : 1441-aeze
Match[1] : 1441-aezb
Match[1] : 1441-aezc
Match[1] : 1441-aezf


但这与我样本的每个部分都匹配。我不明白为什么

这是reg101:Regex101 example

最佳答案

我不确定您的超前$应该怎么做,但是在字符串的末尾(或带有m-Modifier的行的末尾)未转义的匹配它-但在该行没有行尾比赛结束。在您的模式中,"表示比赛结束,因此您只需将$替换为"即可使其正常工作,例如id:"([^"]+)",name:"(?![^"]*mtr")[^"]*"

查看更新的链接:https://regex101.com/r/tY1aG7/4

07-28 09:16