我有这个正则表达式:
(?:(?: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
我需要它来匹配key:value对,即使它是第一个并且没有运算符... ...
更新:键:值不是这里的问题,我需要它来匹配最后一个运算符之后的所有内容
更新2:尝试执行以下操作 -
(?:(?:AND\sNOT|AND|OR)?(?!.*(?:AND\sNOT|AND|OR))\s)(.*)
(?:(?:AND\sNOT|AND|OR?)(?!.*(?:AND\sNOT|AND|OR))\s)(.*)
无效
答案 0 :(得分:2)
编辑 - 我的不好,JS不支持\K
。这是另一种选择:
/(?:.*(?:AND|OR|NOT)\s+)?(.*)/
(第1组)
https://regex101.com/r/AyVV89/3(请检查右侧面板上的匹配项,由于某种原因,文本中未突出显示第1组。)
原帖
根据您的上次更新(在您提及之前根本不明显):
键:价值不是这里的问题,我需要它来匹配所有内容 最后一个算子
这个将匹配最后一个运算符之后的任何内容,无论它是什么(并且没有运算符也可以工作):
/(?:.*(?:AND|OR|NOT)\s+\K)?.*/
答案 1 :(得分:1)
<强> 更新 强>
根据评论,我假设您需要匹配最后一个键:值对及其运算符(如果有)以及之后发生的任何事情:
(?:.*\b(AND(?:\sNOT)?|OR) +)?(\S+:\S+.*)
您需要的内容可以简化为:
(?:AND(?:\sNOT)?|OR)\s+(\S+)$
(?:AND(?:\sNOT)?|OR)
匹配AND
或AND NOT
或OR
\s+
匹配任意数量的空格(\S+)
匹配并捕获无空白字符$
断言字符串结尾答案 2 :(得分:0)
根据您的解释,您根本不需要第一个操作员。只需尝试
(?!.*(?:NOT|AND|OR)\s)(\b.*)