2016-02-24 37 views
0

我有這個字符串:如何多次執行一個捕獲組?

var str = "some text start:anything can be here some other text"; 

這裏是預期的結果:

//=> some text start:anythingcanbehere some other text 

換句話說,我試圖刪除這樣的字符串的特定範圍之間的所有空格。


而且這是我曾嘗試:

(start:)(?:(\S+)(\s+))(.*)(?= some) 

It works爲好,但我應該執行幾次以達到預期的結果。我如何使用\1+在我的正則表達式來運行它幾次?

+0

使用'g'修改。 – Barmar

+0

你的Javascript代碼在哪裏? – Barmar

+0

@Barmar ['g'修飾符不起作用](https://regex101.com/r/wB9eR9/3),我在發佈我的問題之前對其進行了測試 – stack

回答

3

你不能用簡單的正則表達式替換你想做的事情,因爲捕獲組只能捕獲一個字符串 - 沒有循環。 Javascript允許你提供一個函數作爲替換,並且它可以對捕獲的字符串執行更復雜的操作。

var str = "some text start:anything can be here some other text"; 
 
var newstr = str.replace(/(start:)(.*)(?= some)/, function(match, g1, g2) { 
 
    return g1 + g2.replace(/ /g, ''); 
 
}); 
 
alert(newstr);

2

使用replace有回調:

var repl = str.replace(/(start:.*?)(?= some\b)/, function(_, $1) { 
    return $1.replace(/\s+/g, ''); }); 
//=> some text start:anythingcanbehere some other text 
+0

你在'some'之前缺少空格,所以你會在結果中得到'heresome'。 – Barmar