regex 忽略正则表达式匹配的嵌套括号中的逗号

zazmityj  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(149)

我有下面的正则表达式/[^,\s]+(?:\s+\([^)]*\))?/g,它允许我匹配用逗号分隔的元素,同时忽略()中的逗号
有了这个:

a,b,c (aaa, bbb, ccc),d

我明白了

a
b
c (aaa, bbb, ccc)
d

现在,我想升级它来考虑另一个层次的圆括号。我不想考虑任何层次(我知道递归是不可能的),而只想考虑最多2个层次。
有了这个:

a,(b, b),c (aaa, (bbb, cccc, ddd)),d

我需要

a
(b, b)
c (aaa, (bbb, cccc, ddd))
d

我正在使用https://regex101.com/进行测试,看是否有帮助。

c9x0cxw0

c9x0cxw01#

您可以使用

const matches = text.match(/(?:\([^()]*(?:\([^()]*\)[^()]*)*\)|[^,])+/g);

请参见regex demo
正则表达式匹配一个或多个重复的

  • \([^()]*(?:\([^()]*\)[^()]*)*\)-a (+零个或多个非括号字符+括号之间的子字符串零次或多次重复,后跟零个或多个非括号字符+a )字符(最大两级嵌套括号之间的子字符串)
  • |-或
  • [^,]-逗号以外的字符。

相关问题