Javascript - 从字符串替换子字符串,其中值在特定字符之间

时间:2013-02-15 12:23:06

标签: javascript regex replace

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

(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]

或不?

2 个答案:

答案 0 :(得分:4)

您可以使用一个替换替换所有替换,然后您不会遇到双重替换问题:

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

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

exp = exp.replace(/([A-Za-z]+)/g, "$('$1').value");

答案 1 :(得分:1)

试试这个:

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

\bword boundary,这意味着正则表达式仅匹配time,如果它是一个独立的单词,而不是直接跟随或前面有任何单词字符。