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"]
。
有没有办法只在第一个开头和最后一个结束括号分开?
答案 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);