【发布时间】:2017-07-27 08:47:48
【问题描述】:
我有一个字符串,其中有括号,括号中可能是另一个括号。例如:
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/),但我正在寻找更有效的解决方案。我不知道正则表达式,也许用它可以更好更快地完成。
【问题讨论】:
标签: javascript regex string performance