次のような文字列があります。(((foo)))
次のように文字列からオブジェクトを取得したいと思います。{"text":"foo", "brackets" : 3}
それはどのように可能ですか?
次のような文字列があります。(((foo)))
次のように文字列からオブジェクトを取得したいと思います。{"text":"foo", "brackets" : 3}
それはどのように可能ですか?
これは必ずしも最適な解決策ではありませんが、正規表現で multiple を に一致させ、その後に with までのすべてを一致させ、その後に multiple 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
}
}
これはすべて文字列操作でも実行できますが、正規表現コードの方が読みやすい場合があります。
すべての開き括弧がカウントされていると仮定すると、次のような関数を作成できます。
function makeStringObject(str) {
var parts = str.split('(');
return {
'text': parts[parts.length-1].split(')')[0],
'brackets': parts.length-1
}
}
閉じ括弧と同じ量の開き括弧を常に持っていると仮定すると、次のようにしてそれらを数えることができます。
var myString = '(((foo)))';
var parens = (mainStr.split("(").length - 1); // 3
そしてそれらを削除するには:
var obj = {parens: parens, text: myString.substr(parens, myString.length - parens)};