【发布时间】:2020-05-04 00:00:45
【问题描述】:
尝试做我认为相当简单的字符串替换,但结果比我想象的要复杂。
如果我有一个类似的字符串
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_])
但这会捕获“月份”之前和之后的字符,因此我不能将其用作 string.replace 的参数。
是否有一些解决方法,或者我必须忘记替换功能并使用查找和拼接等“手动”完成?
【问题讨论】:
-
你使用什么编程语言?
-
打字稿或javascript。
-
If I have a string like...我们确实需要在这里看到几个具体的实际示例。 -
如果它适用于我提供的示例字符串,它将涵盖几乎所有的基础。例如 /b 不会与 (months*7) 一起工作,我不认为。
-
s.replace(/\bmonths\b/g, 12)有什么问题?输出为12 + 3 + (startmonths * 3) + 12 - (12*7) + (monthsend*5)
标签: javascript regex ecmascript-2018