0

所以我有这个字符串,它代表一个数学表达式:

(timezone*timelapse)-time

每个单词代表一个输入字段的 id,目前我只是用原型 js 表达式替换每个单词,以便稍后进行评估:

$('timezone').value,

$('timelapse').value

问题是最后一个 id。当我到达它时,我的表情目前是这样的:

($('timezone').value*$('timelapse').value)-time

因此,当我搜索time要替换它的单词时,$('time').value它将影响前两个值并弄乱最终表达式。

我的问题是:如何在这里替换正确的单词?

由于这是一个数学表达式,这个词可能应该在任何数学符号之间,如下所示:

(+-/* **word** +-/*)

[empty space] **word** +-/*)

(*-/* **word** [empty space]

或不?

4

2 回答 2

4

你可以用一个替换全部替换,那么你就没有双重替换问题:

exp = exp.replace(/([A-Za-z]+)/g, function(m){
  return "$('" + m + "').value";
});

如果它是没有任何逻辑的直接替换,您还可以在替换字符串中使用捕获的值,如 Cerbrus 建议的那样:

exp = exp.replace(/([A-Za-z]+)/g, "$('$1').value");
于 2013-02-15T12:34:19.767 回答
1

尝试这个:

var newString = oldString.replace(/\btime\b/, "$('time').value")

\b是一个单词边界time,这意味着正则表达式仅在它是一个独立单词时才匹配,而不是在它直接跟随或前面有任何单词字符时匹配。

于 2013-02-15T12:28:07.330 回答