我有一個字符串,其中有括號,括號內可以是另一個括號。例如:以最有效的方式提取字符串中的複雜括號內的字符
var string1 = "1 a (C(b(c+ d)e-fg)) 3# 4df (h j) 5 6 ((k))";
每個打開的支架都是關閉的,但不一定是立即關閉的,也就是說,支架內可以是另一個支架。字符,數字和其他符號,如+ - #$%(不包括'!')可以遍佈字符串,分組或單獨。
我想要從括號中提取每個字符(不管它是數字,字母,符號......),並將這些字符格式化爲一個空格,其中包括如果字符串緊接着一個接一個,例如「c +」或「e-fg」,它們將被組合在一起。在上面的例子中,結果將是:
var string2 = "C b c+ d e-fg h j k";
我有這樣的代碼,這是否:
var string1 = '1 a (C(b(c+ d)e-fg)) 3# 4df (h j) 5 6 ((k))';
var opens = new Array();
opens.push(string1.indexOf('('));
string1 = string1.replace('(','!')
var closes = new Array();
var done = false;
while (!done) {
openindex = string1.indexOf('(');
closeindex = string1.indexOf(')');
string1 = string1.replace(')','!').replace('(','!');
if (openindex>closeindex) {
opens.push(openindex);
closes.push(closeindex);
}
if (string1.indexOf(')')==-1) {
closes.push(closeindex);
done = true;
}
}
var string2 = '';
for (var i=0;i<opens.length;i++) string2 = string2 + string1.substring(opens[i],closes[i]);
string2 = string2.replace(/!!/g,' ').replace(/!/g,' ').replace(/ /g,' ');
這可行(https://jsfiddle.net/nL2gp80j/1/),但我正在尋找更有效的解決方案。我不知道正則表達式,也許這可以用它更好更快地實現。
感謝您對之前的雙重檢查接受解決方案 – HenryP