我有一个这样的字符串:(((foo)))
我想从这样的字符串中获取一个对象:{"text":"foo", "brackets" : 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
}
}
所有这些也可以通过字符串处理来完成,但正则表达式代码可能更清晰易读。
假设你总是有相同数量的左括号和右括号,你可以这样做来计算它们:
var myString = '(((foo)))';
var parens = (mainStr.split("(").length - 1); // 3
并删除它们:
var obj = {parens: parens, text: myString.substr(parens, myString.length - parens)};
如果您假设每个左括号都在计数,那么您可以拥有这样的功能。
function makeStringObject(str) {
var parts = str.split('(');
return {
'text': parts[parts.length-1].split(')')[0],
'brackets': parts.length-1
}
}