[英]Regex lazy on non-capturing group
我有这个正则表达式:
(?:(?:AND\sNOT|AND|OR)(?!.*(?:AND\sNOT|AND|OR))\s)(.*)
我想要的是得到最后一个关键:值对,例子 -
k:v AND k1:v1 AND NOT k2:v2 OR k3:v3
我希望正则表达式匹配k3:v3,它确实匹配,但它与下一个情境中的键:值不匹配 -
k:v
我需要它来匹配键:值对,即使它是第一个并且没有运算符brefore ...
更新:键:值不是这里的问题,我需要它匹配最后一个运算符后的所有内容
更新2:尝试执行以下操作 -
(?:(?:AND\sNOT|AND|OR)?(?!.*(?:AND\sNOT|AND|OR))\s)(.*)
(?:(?:AND\sNOT|AND|OR?)(?!.*(?:AND\sNOT|AND|OR))\s)(.*)
没用
编辑 - 我的坏,在JS中不支持\\K
这是另一种选择:
/(?:.*(?:AND|OR|NOT)\\s+)?(.*)/
)
https://regex101.com/r/AyVV89/3 (请检查右侧面板上的匹配项,由于某种原因,文本中未突出显示组1。)
原帖
根据您的上次更新(在您提及之前根本不明显):
key:value不是问题,我需要它匹配最后一个运算符后的所有内容
这个将匹配最后一个运算符之后的任何内容,无论它是什么(并且没有运算符也可以):
/(?:.*(?:AND|OR|NOT)\\s+\\K)?.*/
根据您的解释,您根本不需要第一个操作员。 试试吧
(?!.*(?:NOT|AND|OR)\s)(\b.*)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.