我希望能够通过按空格分隔将字符串分隔为值,但是如果括号中包含某些内容,则需要将其包含在单个值中。因此,例如(a b c) d e (f g) h
应该成为['a b c', 'd', 'e', 'f g', 'h']
。什么正则表达式可以为我做到这一点?
如注释中所述,不可能在正则表达式中处理嵌套,因此这是处理您的问题的代码。它使用正则表达式和其他技术:
var str = '(a (b) c) d e (f g) h';
var match;
var myRe = /\([^]+?\)|\S+/g;
var result = [];
while (match = myRe.exec(str)) {
result.push(match[0]);
}
var tmp = "";
var final = [];
for (var i = 0; i < result.length; i++) {
var leftP = (result[i].match(/\(/g) || []).length;
var rightP = (result[i].match(/\)/g) || []).length;
if (leftP !== rightP) {
tmp += result[i];
for (var j = i + 1; j < result.length; j++) {
tmp += result[j];
if ((tmp.match(/\(/g) || []).length === (tmp.match(/\)/g) || []).length) {
final.push(tmp);
tmp = "";
i = j + 1;
break;
}
}
} else {
final.push(result[i]);
}
}
for (var i = 0; i < final.length; i++) {
final[i] = final[i].replace(/\)(\S+)/g, ') $1');
}
for (var i = 0; i < final.length; i++) {
final[i] = final[i].replace(/^\(([^]+)\)$/, '$1');
}
它可能没有进行优化,但我认为它可以解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句