这是我之前问题的直接后续,我得到了以下正则表达式;
const matches = text.match(/(?:\([^()]*(?:\([^()]*\)[^()]*)*\)|[^,])+/g);
Run Code Online (Sandbox Code Playgroud)
由此a,(b, b),c (aaa, (bbb, cccc, ddd)),d我得到
a
(b, b)
c (aaa, (bbb, cccc, ddd))
d
Run Code Online (Sandbox Code Playgroud)
但当我遇到以下情况时,它会失败a,(b, b),c (aaa, ((b b), cccc, ddd)),d,其中有 3 个嵌套括号,在剖析正则表达式如何工作后这是合乎逻辑的。
我尝试更新它以考虑另一级括号,我做了以下操作
a
(b, b)
c (aaa, (bbb, cccc, ddd))
d
Run Code Online (Sandbox Code Playgroud)
它有效(在线演示),但我不确定这是否是最佳解决方案。我也不知道它是否会涵盖所有情况。有人能证实吗?或者也许有更好的正则表达式。
我也在寻找一种方法来为给定数量的括号生成此类正则表达式。我有 2 和 3,但是 N 呢?如果我总是递归地重复以下部分,它会起作用吗(?:\([^()]*\)[^()]*)*?我知道正则表达式无法处理任意数量的嵌套括号,但我并不是在寻找这个。我想要一个给定的数字来生成正则表达式(使用 JS)并使用它。
我试图匹配以某个字符串开头的整个字符串,然后匹配任意数量的字符::,除非::匹配,否则仅接受 if 后跟该字符串CASE。
例如:以 开头,后跟Linus::0 个或多个 1 字符的字符串,除非 if ::thenCASE必须跟在 else 后面,仅匹配 之前的所有内容::。
Linus::AOPKNS::CASE将捕获整个字符串
Linus::AOPKNS将捕获整个字符串
Linus::AOPKNS::OK只会捕获Linus::AOPKNS
我想我必须使用积极的前瞻,但考虑到我想匹配 之前的任意数量的字符,我不太确定该怎么做::。
我试图了解正则表达式中的展开循环。之间的最大区别是:
MINISTÉRIO[\s\S]*?PÁG
Run Code Online (Sandbox Code Playgroud)
和
MINISTÉRIO(?:[^P]*(?:P(?!ÁG\s:\s\d+\/\d+)[^P]*)(?:[\s\S]*?))PÁG
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
我为什么应该使用第二个,如果第一个做相同的事情?
谢谢。