用正则表达式计算括号

don*_*aka 6 javascript regex

我的字符串是: (as(dh(kshd)kj)ad)... ()()

如何用正则表达式计算括号?我想选择从第一个左括号开始并在...

将它应用到上面的例子中,这意味着我想得到这个字符串: (as(dh(kshd)kj)ad)

我试图写它,但这不起作用:

var str = "(as(dh(kshd)kj)ad)... ()()";
document.write(str.match(/(.*)/m));
Run Code Online (Sandbox Code Playgroud)

acd*_*ior 8

正如我在评论中说,流行的看法相反(不相信一切人说)匹配嵌套的括号内可能的正则表达式。

使用它的缺点是您只能在嵌套的固定级别上执行此操作。对于您希望支持的每个额外级别,您的正则表达式将越来越大。

但不要相信我的话。让我演示给你看。正则表达式\([^()]*\) 匹配一级。对于最多两个级别,请参阅此处的正则表达式。为了符合您的情况,您需要:

\(([^()]*|\(([^()]*|\([^()]*\))*\))*\)
Run Code Online (Sandbox Code Playgroud)

它将匹配粗体部分: (as(dh(kshd)kj)ad)... ()()

检查这里演示,看看我所说的固定嵌套级别是什么意思。

等等。要继续添加级别,您所要做的就是将最后[^()]*一部分更改为([^()]*|\([^()]*\))*在此处检查三个级别)。正如我所说,它会变得越来越大。