如何删除括号,并计算它们?

时间:2013-01-12 16:21:55

标签: javascript regex

我有一个这样的字符串:(((foo)))

我想从字符串中获取一个对象:{"text":"foo", "brackets" : 3}

怎么可能?

3 个答案:

答案 0 :(得分:3)

它不一定是最佳解决方案,而是一个正则表达式,以匹配多个((\(+),后跟)([^)]+)的所有内容,其次是使用)的多个(\)+)非常简单。这将允许您在构建对象之前验证括号是否平衡。

var s = '(((foo)))';
var parts = s.match(/^(\(+)([^)]+)(\)+)$/);
// ["(((foo)))", "(((", "foo", ")))"]

// If the start and end match, preventing something like `(((foo)` with unbalanced ()
// and the total length of the extracted array is 4
if (parts.length === 4 && parts[1].length === parts[3].length) {
  // Your result is:
  var yourResultObj = {
    "text": parts[2],
    "brackets": parts[1].length
  }
}

所有这一切也可以通过字符串处理完成,但正则表达式代码可能更清晰易读。

答案 1 :(得分:1)

假设你总是拥有与关闭parens相同数量的开放数量,你可以这样做来计算它们:

var myString = '(((foo)))';
var parens = (mainStr.split("(").length - 1); // 3

并删除它们:

var obj = {parens: parens, text: myString.substr(parens, myString.length - parens)};

答案 2 :(得分:1)

如果你假设每个左括号都在计数,你就可以有这样的函数。

function makeStringObject(str) {
    var parts = str.split('(');
    return {
        'text': parts[parts.length-1].split(')')[0],
        'brackets': parts.length-1
    }
}