正则表达式找到JS中的第一个开头和最后一个结束括号

时间:2017-07-10 11:24:45

标签: javascript regex split

tl; dr:我想在JavaScript的第一个开头和最后一个结束括号中分隔一个字符串:

"abc(def)ghi"                ==>    ["abc", "def", "ghi"]
"abc(def(ghi)jkl)mno"        ==>    ["abc", "def(ghi)jkl", "mno"]
"abc(def(ghi(jkl)mno)pqr"    ==>    ["abc", "def(ghi(jkl)mno", "pqr"]
"abc(def(ghi)jkl)mno)pqr"    ==>    ["abc", "def(ghi)jkl)mno", "pqr"]

我尝试使用

实现这一目标
"abc(def(ghi)jkl)mno".split(new RegExp('\\\(|\\\)'))

但似乎匹配每个括号并给我["abc", "def", "ghi", "jkl", "mno"]。 我也试过这个:

"abc(def(ghi)jkl)mno".split(new RegExp('\\\((?:.*)\\\)'))

但这似乎也与括号内的整个部分相匹配,并给了我["abc", "mno"]

有没有办法只在第一个开头和最后一个结束括号分开?

2 个答案:

答案 0 :(得分:2)

JavaScript似乎包含结果数组中split函数中使用的Regex的匹配项。这是对我有用的代码:

"abc(def(ghi)jkl)mno".split(new RegExp('\\((.*)\\)'))

它给了我:["abc", "def(ghi)jkl", "mno"]

它捕获了开始和结束括号之间的所有内容。正则表达式似乎让中间部分变得贪婪。

(在写这个问题的时候,我偶然发现了这一点)

答案 1 :(得分:0)

你可以这样做



var a1="abc(def)ghi";
var a2="abc(def(ghi)jkl)mno";
var a3="abc(def(ghi(jkl)mno)pqr";
var a4="abc(def(ghi)jkl)mno)pqr";

a1 = a1.split(new RegExp('\\((.*)\\)'));
a2 = a2.split(new RegExp('\\((.*)\\)'));
a3 = a3.split(new RegExp('\\((.*)\\)'));
a4 = a4.split(new RegExp('\\((.*)\\)'));

console.log(a1);
console.log(a2);
console.log(a3);
console.log(a4);