我有一个字符串,因为我想搜索括号对正确嵌套,它必须有一些值在javascript里面

I have a string , in that I want to search the parentheses pair with proper nested and it must have some value inside it in javascript

本文关键字:里面 javascript 因为 字符串 有一个 搜索 嵌套      更新时间:2023-09-26

我有一个字符串,因为我想搜索括号对适当嵌套,它必须有一些值在javascript里面。例如,

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

在上述字符串中,所有变量都被@符号覆盖。根据上面的语句,TradeImpact将首先除以45,剩下的计算已经完成,如果用户像下面这样输入,那么我应该显示使用错误括号的错误(我不能用开始和结束花括号的计数来做,因为下面的字符串也将具有相等的开始和结束花括号)。请帮我验证一下,谢谢。

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

最简单的方法是将变量替换为值,并将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")