gpt4 book ai didi

javascript - 为什么这个组不捕获出现在括号中的所有项目?

转载 作者:行者123 更新时间:2023-11-30 11:34:12 25 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式,它将捕获第一组中未被括号括起来的字符串,然后是任何数量的被括号括起来的字符串。

例如

2(3)(4)(5)

应该是:2 - 第一组,3 - 第二组,依此类推。

我想到的是这个正则表达式:(我正在使用 JavaScript)

([^()]*)(?:\((([^)]*))\))*

但是,当我输入像 A(B)(C)(D) 这样的字符串时,我只会捕获 A 和 D。

https://regex101.com/r/HQC0ib/1

谁能帮我解决这个问题,并可能解释一下错误在哪里?

最佳答案

由于您不能在 JS 正则表达式中使用 \G anchor (以匹配连续的匹配项),并且没有像 .NET/PyPi 正则表达式库中那样针对每个捕获组的堆栈,您需要使用两步法:1) 将字符串匹配为整个文本条纹,然后 2) 进行后处理以获取所需的值。

var s = "2(3)(4)(5) A(B)(C)(D)";
var rx = /[^()\s]+(?:\([^)]*\))*/g;
var res = [], m;
while(m=rx.exec(s)) {
res.push(m[0].split(/[()]+/).filter(Boolean));
}
console.log(res);

我将 \s 添加到否定字符类 [^()] 因为我将示例添加为单个字符串。

图案细节

  • [^()\s]+ - 除了 (, ) 和空格之外的 1 个或多个字符
  • (?:\([^)]*\))* - 0 个或多个序列:
    • \( - 一个 (
    • [^)]* - ) 以外的 0+ 个字符
    • \) - 一个 )

拆分正则表达式是 [()]+ 匹配 1 个或多个 )( 字符,和 filter(Boolean ) 删除空项。

关于javascript - 为什么这个组不捕获出现在括号中的所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45116728/

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