2011-07-13 71 views
3

我有一個字符串

test =" abc" 

我需要更換之間「=「」和‘ABC’與$符號的每一個空間的長度代替正則表達式匹配所以這裏應該成爲

test ="$$$$abc" 

我試圖做這樣。

str.replace(/(=")(\s+)/g,"$1" + "$2".replace(/\s/g, "$")) 

我打算做的是與$ 1我正在提取=「字符串的一部分。然後我試圖將正則表達式($ 2)的第二個匹配轉換爲一個字符串。我認爲「$ 2」在擴展$ 2反向引用後會給我字符串''。然後用這個擴展字符串,我試圖再次調用replace來嘗試將這些空格轉換爲$。之後,我追加$ 1和替換$ 2得到=「$$$$。但我意識到$ 2不會擴展到''。有什麼方法可以操縱反向引用的字符串並使用該操作版本來代替我的字符串的內容。

回答

2

您可以使用該功能match,後來加入的結果。

m = str.match(/(.*)(=")(\s+)(.*)/); 
str = m[1]+m[2]+m[3].replace(/\s/g, "$")+m[4]; 
4

謝謝您的回答霍華德。無論如何,我發現了另一種方式來做到這一點。看來你可以傳遞一個函數作爲替換函數的第二個參數,當在匹配的字符串中找到一個匹配的字符串時,這個函數將被調用,匹配字符串中的匹配項,匹配括號中的字符串, ire字符串。然後匹配將被從此函數返回的字符串替換

str. replace(/(=")(\s+)/g, function(match,p1,p2,offset,str){return match.replace(/\s/g,"$")})