2012-05-24 65 views
1

我輸入文本的多行,看起來像這樣:的Javascript:更換內更換

a.b.c.d.e (f:g) 

我需要把它變成

a.b.c.d.e (a/b/c/d/e/f?g) 

注意,虛線部分(a.b.c.d.e)能有元素數目不等,所以有時它會q.r.s.t,有時u.v.w.x.y.z等。我有一個replace(),這將使我(a.b.c.d.e.f?g),但我需要的是那麼把所有這些. s轉換/ S IN的結果。

有沒有辦法做到內更換更換?或者我應該只對該字符串調用replace()兩次?

很抱歉,如果這個問題是措辭不當,我不是在JavaScript的正則表達式非常精通。

回答

4

一個非常瘋狂的做這件事的方式:

var str = "a.b.c.d.e (f:g)"; 
var re = /([^\s]+)\s\(([^:]+):([^\)]+)\)/; 
var newStr = str.replace(re, function(a,b,c,d){ return b + " (" + b.replace(/\./g,"/") + "/" + c + "?" + d + ")"; }); 

jsfiddle

+0

替換()可以帶一個函數作爲其第二個參數?這太酷了,它傷害了 – Mala

2

您需要鏈replace()一個接一個的電話。

var result = source.replace("foo", "bar").replace("oof", "rab"); 
1

一個理智的方式:) http://jsfiddle.net/smfPU/

input = "a.b.c.d.e.w.x.y.z (f:g:h)"; 
output = input.replace(/:/g, "?"); 
outputparts = output.split("("); 
left = outputparts[0]; 
middle = left.replace(/\./g, "/").trim(); 
right = outputparts[1]; 
output = left + "(" + middle + "/" + right; 
document.write(output);