我试图进行一个看似相当简单的字符串替换,但结果比我想象的要复杂。
如果我有一个像这样的字符串
months + 3 + (startmonths * 3) + months - (months*7) + (monthsend*5)
为了清晰起见,我正在解析的“公式”是由用户提供的,并且可以由用户构想的任何一系列变量名和运算符(+ * /-)以及括号组成。我需要做的第一件事是用数字替换变量,然后评估结果表达式。
我要寻找的是如何使用string.replace函数替换所有出现的"months"一词为"12"。
因此,希望该函数的输出为:
12 + 3 + (startmonths * 3) + 12 - (12*3) + (monthsend*5)"
似乎我需要一个正则表达式来避免替换字符串中的"startmonths"这样的字符。也许在JavaScript正则表达式中无法实现,因为“lookbehinds”在现代浏览器中支持不够全面。
我尝试使用
[^A-Za-z9-9_](months)(?:[^A-Za-z0-9_])
,
但它捕获了'months'前面和后面的字符,所以我不能将其作为string.replace的参数。是否有解决方法,或者我必须忘记replace函数并手动使用find和splice等功能呢?
s.replace(/\bmonths\b/g, 12)
有什么问题?输出是12 + 3 + (startmonths * 3) + 12 - (12*7) + (monthsend*5)
。 - Nick