我有一个这样的字符串:(((foo)))
我想从字符串中获取一个对象:{"text":"foo", "brackets" : 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
}
}