所以我有这个字符串,代表一个数学表达式:
(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]
或不?
答案 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")
\b
是word boundary,这意味着正则表达式仅匹配time
,如果它是一个独立的单词,而不是直接跟随或前面有任何单词字符。