2013-02-15 90 views
0
之間

所以我有這個字符串,它表示一個數學表達式:使用Javascript - 從字符串替換字符串,該值爲特定字符

(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

使用字邊界。 – 2013-02-15 12:27:17

回答

1

試試這個:

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

\bword boundary,這意味着正則表達式只匹配time如果它是一個獨立的詞,而不是在它後面直接或通過任何單詞字符之後。

+0

謝謝,這似乎是做的伎倆,但它只適用於第一次發生,我如何使這一切的所有發生? \ b是一個字的邊界,所以\ bword \ b其他/字符在開始和結束時做了什麼? – Maxrunner 2013-02-15 15:10:18

+0

'/'字符是正則表達式分隔符。他們只是意味着'開始正則表達式'和'結束正則表達式'。使用'/ \ btime \ b/g'使正則表達式在_all_事件上工作。 (所以,在第二個'/') – Cerbrus 2013-02-15 15:16:57

+0

好後添加'g'。另外如果值的時間是一個變量字符串我怎麼能混合正則表達式?這似乎並沒有工作:var test =/\ +變量+ \ b/g – Maxrunner 2013-02-15 15:27:40

4

你可以用一個替換全部替換,那麼你沒有雙置換問題:

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

如果它是一個直更換無需任何邏輯,你也可以在替換字符串中使用捕捉值,正如Cerbrus所建議的:

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

你的功夫比我強。 +1 ...雖然你的風格不完美,但可以這樣壓縮:'.replace(/([A-Za-z] +)/ g,「$('$ 1')。value」);': P – Cerbrus 2013-02-15 12:35:22

+0

@Cerbrus:是的,你說得對,我沒有想到這個選擇。如果需要進一步擴展,回調版本很有用。 – Guffa 2013-02-15 14:16:11