2012-02-22 70 views
0

我想在一個字符串像不要在比賽

string = 'The value is ij35dss. The value is fsd53fdsfds.'

,我想是這樣string.match(/The value is (.*?)\./g); 只返回['ijdss','fsdfdsfds'],而不是['The value is ijdss.', 'The value is fsdfdsfds.']

回答

4

使用RegExp.exec改爲運行正則表達式字符串,這裏是一個樣本:

var string = 'The value is ij35dss. The value is fsd53fdsfds.'; 
var re = new RegExp(/The value is (.*?)\./g) 

var strs = [] 
var m = re.exec(string) 

while(m != null) { 
    strs.push(m[1]); 
    m = re.exec(string) 
} 

alert(strs) 

和的jsfiddle:

如果你認爲你會需要這個時候,你可以將它添加到String.prototype:

String.prototype.matchGroup = function(re, group) { 
    var m = re.exec(string); 
    var strs = []; 
    while(m != null) { 
    strs.push(m[group]); 
    m = re.exec(string); 
    } 
    return strs; 
} 

var string = 'The value is ij35dss. The value is fsd53fdsfds.'; 
alert(string.matchGroup(/The value is (.*?)\./g, 1)); 

的jsfiddle:

現金

+1

是啊,這是一個有點hackish – ParoX 2012-02-22 02:24:29

+0

見編輯 - 不過,我不明白爲什麼你認爲它是 「的hackish」。這是使用正則表達式的一種正常方式 - 您匹配,然後遍歷所有匹配並提取組,對我來說似乎很乾淨。 – 2012-02-22 02:35:03

+0

@BHare,這不是黑客,只是寫得很差。可以做得更好,就像:http://jsfiddle.net/SutFc/ – Qtax 2012-02-22 05:59:52