gpt4 book ai didi

JavaScript 正则表达式 : Ignore closing bracket when enclosed in parentheses

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:54 25 4
gpt4 key购买 nike

我有一个带有几个(可选)捕获组的正则表达式。我正在尝试添加一项新功能,允许用户将内容添加到与正则表达式的右括号匹配的捕获组之一。我很难忽略这场比赛

当前正则表达式为 /\[(.+?)=(.+?)(?:\|(.+?))?(?:\:(.+?))?\]/g

这允许用户根据以下内容定位数据:

[key=value|filter:filtervalue]

其中filter和filtervalue是可选的。

问题是,对于该值,现在应该可以将数组中的索引作为目标。例如:

[data=example(products[0].id)]

但是,正则表达式仅匹配 .id,因此第二个捕获组是 example(products[0)。我希望它是 example( products[0].id)。我想如果我可以忽略用括号括起来的右括号,应该没问题,但我一直不知道如何实现。

应匹配的示例:

[data=example(products[0].id)]
[data=example(products[index].id)]
[data=regular]
[data=test|number:2]

我创建了一个regex101 。如有任何帮助,我们将不胜感激。

最佳答案

您可以使用

/\[([^=\]]+)=((?:\[[^\][]*]|[^\]])+?)(?:\|([^:\]]+):((?:\[[^\][]*]|[^\]])+?))?]/g

请参阅regex demo

请注意,惰性点匹配模式被替换为更具限制性的否定字符类,以确保括号字符串的一个部分不会溢出到另一部分。为了允许匹配第一级嵌套 [...] 子字符串,使用 \[[^\][]*]|[^\]] 模式来匹配使用 [...] 或非 ] 子字符串。

详细信息:

  • \[ - 文字 [
  • ([^=\]]+) - 第 1 组捕获除 =] 之外的 1 个以上字符
  • = - = 符号
  • ((?:\[[^\][]*]|[^\]])+?) - 第 2 组捕获 1+ 次出现(尽可能少):
    • \[[^\][]*] - [,然后是 ][< 之外的 0+ 个字符,然后 ]
    • | - 或
    • [^\]] - 除 ]
    • 之外的任何字符
  • (?:\|([^:\]]+):((?:\[[^\][]*]|[^\]])+?))? - 可选的组匹配:
    • \| - | 字符
    • ([^:\]]+) - 第 3 组捕获除 :] 之外的 1 个以上字符
    • : - 冒号
    • ((?:\[[^\][]*]|[^\]])+?) - 第 4 组捕获与第 2 组相同的文本。
  • ] - 文字 ] 字符。

关于JavaScript 正则表达式 : Ignore closing bracket when enclosed in parentheses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com