我有一个这样的字符串:
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 ??
}
我在用|操作符,我认为这可能会影响结果。它是否在匹配时立即停止,并且不捕获任何类型括号中的其他字符串?
我遇到的主要问题是试图访问匹配的组-我以为它们会在match[0]和match[1]中,因为我期望2个组,但当我console.log它们时,我得到了相同的结果。
1条答案
按热度按时间jhkqcmku1#
看起来你的问题是由你期望的匹配重叠的事实引起的(一个可能是另一个的一部分)。因此,你只需要将你的表达式 Package 成一个未锚定的正向前看:
下面是一个regex demo(我用更有效的否定字符类替换了懒惰的点匹配)。
JS演示: