我有一个这样的字符串:
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组,但是当我控制台时,记录它们我得到相同的结果。
答案 0 :(得分:0)
看来你的问题是由于你期望的匹配重叠(一个可能是另一个的一部分)。因此,您只需要将表达式包装成一个未发送的正向前瞻:
Inner Exception
这是regex demo(我用更有效的否定字符类替换了懒字点)。
JS演示:
(?=\[([^\]]*)\]|\(([^)]*)\))