1

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

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

这怎么可能?

4

3 回答 3

3

它不一定是最好的解决方案,但是一个正则表达式来匹配多个(with (\(+),然后是直到)with的所有内容([^)]+),然后是多个)with(\)+)是非常容易的。这将允许您在构建对象之前验证括号是否平衡。

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
  }
}

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

于 2013-01-12T16:26:05.820 回答
1

假设你总是有相同数量的左括号和右括号,你可以这样做来计算它们:

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

并删除它们:

var obj = {parens: parens, text: myString.substr(parens, myString.length - parens)};
于 2013-01-12T16:27:56.087 回答
1

如果您假设每个左括号都在计数,那么您可以拥有这样的功能。

function makeStringObject(str) {
    var parts = str.split('(');
    return {
        'text': parts[parts.length-1].split(')')[0],
        'brackets': parts.length-1
    }
}
于 2013-01-12T16:41:48.173 回答