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

时间:2016-06-24 15:44:39

标签: javascript regex string

我使用的是javascript正则表达式引擎,我在使用正则表达式方面遇到了困难:

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

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

我的正则表达式尝试:

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

匹配组1的预期结果:

reply()

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

这是reg101:Regex101 example

2 个答案:

答案 0 :(得分:1)

这是使用此模式的一种方式

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

Demo

这是另一个

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

Demo

答案 1 :(得分:1)

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

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