0

我有一个 string ,因为我想搜索带有正确嵌套的括号对,并且它必须在 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 回答