JavaScript正则表达式匹配最外部的匹配括号内的内容?

时间:2014-02-08 00:24:29

标签: javascript regex

我尝试将字符串转换为"(foo)"到数组:[foo]其中foo是嵌套结构。

例如,我们有一个字符串: "( ('hello' ('world')) (bar) )",这应该转换为

[['hello', ['world']], [MasterObj['bar']]]

要开始使用,请简化问题,

"( (foo) (bar) )" - f - > ["(foo)", "(bar)"]

如果我可以获得一个函数来完成这项工作,那么嵌套对象可以递归完成。

使用非常原始的正则表达式,我可以写:

 var src = "( (foo) (bar) );"

 var src1 = src.match(/\(.*\)/g);     

src1 = [' (foo)(bar) ']

至少检测到匹配的括号。

 var src = "(foo) (bar)";

 var src1 =src.match(/\(.*\)/g);        

src1 = [' foo)(bar '] 括号是无与伦比的。

所以,这是我的问题:

你如何匹配最外面的匹配括号内的内容?

是否有共同模式或正则表达式?

谢谢你的想法。

2 个答案:

答案 0 :(得分:2)

在这里读过一些人写了stuck后,我发现了一种非常简单的方法来匹配括号。

对于此解决方案,使用正则表达式相当复杂。

假设我们有一个复杂的嵌套列表

(a ((b) (c(d)) e))

我们在字符串上有一个光标,

  • 从第一个( count = 0开始,然后将光标移到最后。

  • 每次光标遇到(时,都会增加计数。

  • 每次光标遇到)时,都会减少计数。

  • 匹配count === 0时的)

在此示例中,在光标从头部移动到结束时,计数进入 - >

0 1 2 3 2 3 4 3 2 1 0 <匹配!

答案 1 :(得分:0)

我并不完全理解你要完成的任务,但我认为你正在试图用正则表达式来处理嵌套模式。我那样的话,你不能这样做。正则表达式不是正确的工具。