正则表达式匹配不以特定字符串结尾的组

Regex match a group not ending with specific string

本文关键字:字符串 结尾 正则表达式      更新时间:2023-09-26

我正在使用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"}]}}

My regex try:

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

匹配组1的预期结果:

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

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

下面是reg101: Regex101示例

我不确定,您的展望中的$应该做什么,但未转义的它在字符串的末尾匹配(或使用m-Modifier的行结束)-但是在您的匹配结束时没有行结束。在您的模式中,"表示匹配结束,因此您可以将$替换为"以使其工作,如id:"([^"]+)",name:"(?![^"]*mtr")[^"]*"

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

下面是使用这个模式的一种方法

id:"([^"]+)",name:"(?:.(?!mtr))*?'}

演示

这里有另一个

id:"([^"]+)",name:"(?:[^m]|m(?!tr))*?'}
演示