0

私は文字列を持っています。適切にネストされた括弧のペアを検索したいので、javascriptの中に何らかの値が含まれている必要があります。例えば、

String = "@PriceMovement@-(@AssetProof@-(@TradeImpact@)/45)-@UninvestedCashImpact@"

上記の文字列では、すべての変数が@記号で覆われています。上記のようTradeImpactに、最初に45で除算され、残りの計算が行われます。ユーザーが以下のように入力すると、間違った括弧が使用されたというエラーを表示する必要があります(以下のように中括弧の開閉の数ではこれを行うことはできません)文字列も同じ開始ブレースと終了ブレースを持ちます)。事前に感謝の気持ちを検証するのを手伝ってください。

String = "@PriceMovement@-(@AssetProof@-(@TradeImpact@))/45)-((@UninvestedCashImpact@)"
4

1 に答える 1

0

最も簡単な方法は、変数を値に置き換えevalて、結果の文字列に適用することです。

str = "@PriceMovement@-(@AssetProof@-(@TradeImpact@))/45)-((@UninvestedCashImpact@)"
values = {
    PriceMovement: 1,
    AssetProof: 2,
    TradeImpact: 3, 
    UninvestedCashImpact: 5
}

try {
    str = str.replace(/@(\w+)@/g, function($0, $1) {
        return values[$1]
    })
    result = eval(str)
    alert(result)
} catch(e) {
    alert("Error: " + e)
}

これにより、無効な演算子など、他の種類の構文エラーも検出されます。

(...)括弧の入れ子だけをチェックするには、一致するものがなくなるまでループで置き換えます。次に、文字列に対になっていない開き括弧または閉じ括弧が含まれているかどうかを確認します。

re = /\([^()]*\)/g
while(str.match(re))
    str = str.replace(re, '')
if(str.match(/[()]/))
    alert("INVALID NESTING")
于 2013-03-18T09:59:05.183 に答える