否定正则表达式中的反向引用

问题描述 投票:1回答:1

我写了这样的正则表达式:

(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:[^\k<quote>]|(?<=\\)\k<quote>)+\k<quote>))

但由于[^]内部的反向引用,它无效。我在this thread上寻找解决方案,并写道:

(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:(?!\k<quote>).|(?<=\\)\k<quote>)+\k<quote>))

但它仍然无法正常工作。

我究竟做错了什么?

我想用字符串中的值提取所有键,如:

arg="value" arg='value' arg=`value` arg="value 'value'" arg='value \'value\' value' arg="value \"value\" value" arg=`value \`value\ value`

regex101 - online preview

node.js regex backreference negative-lookahead negation
1个回答
1
投票

您可以使用正确的tempered greedy token修复正则表达式:

(?<arg>               # Start arg group
  (?<key>\w+)         #  key group: 1+ word chars
  =                   # =
  (?<quote>['"`]?)    # quote group: an optional " ' or `
  (?<value>(?:(?!\k<quote>)[^\\])*(?:\\[\s\S](?:(?!\k<quote>)[^\\])*)*) # value group: any 0+ chars other than quote char with escaped quote chars allowed
  \k<quote>           # quote group value
)                     # end of arg group

regex demo

单行:

(?<arg>(?<key>\w+)=(?<quote>['"`]?)(?<value>(?:(?!\k<quote>)[^\\])*(?:\\[\s\S](?:(?!\k<quote>)[^\\])*)*)\k<quote>)

demo.

© www.soinside.com 2019 - 2024. All rights reserved.