正则表达式解析括号中的值

蓝色的火

我希望能够通过按空格分隔将字符串分隔为值,但是如果括号中包含某些内容,则需要将其包含在单个值中。因此,例如(a b c) d e (f g) h应该成为['a b c', 'd', 'e', 'f g', 'h']什么正则表达式可以为我做到这一点?

阿玛(Ammar Alyousfi)

如注释中所述,不可能在正则表达式中处理嵌套,因此这是处理您的问题的代码。它使用正则表达式和其他技术:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章