繁体   English   中英

如何使用正则表达式将变量替换为计算字符串中的值?

[英]How can I use regex to replace variables by their value in a calculation string?

我想创建一个带有变量的计算器,但是变量和计算是由用户定义的。 我已经制作了一个程序来获取所有这些东西,但现在我想用计算中的值替换变量。

为了确保不只替换变量的一部分(例如,如果我定义了 'm' 和 'm1',我不想用 'm' 值替换 'm1' 中的 m),我有遵守以下条件:

  • 在变量名之前,要么有一个左括号,要么是一个操作

  • 在变量名之后,要么有一个右括号,要么是一个操作

当我得到计算时,空格被删除(我还没有包括那个功能)

为此,我编写了以下代码:

for (var i = 0; i < names.length; i++) 
{
    regex = "(\+|\-|\*|\/|\()" + names[i].value + "(\+|\-|\*|\/|\))"
    replacement = "$1" + values[i].value + "$2"
    calculation = calculation.replace(regex, replacement)
}

例如,对于变量“m”,我得到正则表达式: (\\+|\\-|\\*|/|\\()m(\\+|\\-|\\*|/|\\))

问题是没有找到任何东西(我试过(m+n+x) )。 我知道问题来自正则表达式,但我找不到它。

您的regex不会被视为正则表达式,而只是普通的string

相反,把它变成一个new RegExp() 请注意,模式字符串中的单个\\将被删除(因为这是标准转义字符),因此您需要“双重转义”它们。

 const names = [{value: "a"}, {value: "b"}]; const values = [{value: 1 }, {value: 5 }]; let calculation = "(a+b)"; for (var i = 0; i < names.length; i++) { const pattern = "(\\\\+|\\\\-|\\\\*|\\\\/|\\\\()" + names[i].value + "(\\\\+|\\\\-|\\\\*|\\\\/|\\\\))"; const regex = new RegExp(pattern); const replacement = "$1" + values[i].value + "$2" calculation = calculation.replace(regex, replacement) } console.log(calculation);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM