输出js正则表达式组匹配

时间:2016-02-29 11:48:48

标签: regex

我有一个这样的字符串:

hello [world (this is a string) with parenthesis](i'm in brackets too) 

使用正则表达式我尝试在方括号[...]中包含任何匹配,并在圆括号内得到任何匹配(...)我的一些字符串只包含(...)和一些只包含[...],其他包含嵌套和分离的混合,如上例所示。

所以,我试图达到的输出:

1. [world (this is a string) with parenthesis]
2. (this is a string)
3. (i'm in brackets too)

我假设1.匹配组1和2&3将匹配组2?

我目前使用的代码和正则表达式是:

var str = "hello[world(this is a string) with parenthesis](i'm in brackets too)";
var re = /\[(.*?)\]|\((.*?)\)/g; // try and get all [] and ()

var match = re.exec(str.toString());

if (match) {
  // how do I output what are in square brackets
  // and what are in round brackets?
  // is it console.log(match[1]) for example ?? 
}

我正在使用|我的正则表达式中的运算符,我认为这可能会影响我的结果。它是否会在匹配时停止并且不捕获任何类型的括号中的其他字符串?

我遇到的主要问题是尝试访问匹配的组 - 我认为它们会匹配[0]并匹配[1],因为我期待2组,但是当我控制台时,记录它们我得到相同的结果。

reFiddle here

1 个答案:

答案 0 :(得分:0)

看来你的问题是由于你期望的匹配重叠(一个可能是另一个的一部分)。因此,您只需要将表达式包装成一个未发送的正向前瞻:

Inner Exception

这是regex demo(我用更有效的否定字符类替换了懒字点)。

JS演示:

(?=\[([^\]]*)\]|\(([^)]*)\))