2012-04-11 38 views
0

我有這個字符串的對象:JavaScript正則表達式匹配前和拖尾字符

<FLD>dsfgsdfgdsfg;NEW-7db5-32a8-c907-82cd82206788</FLD><FLD>dsfgsdfgsd;NEW-480e-e87c-75dc-d70cd731c664</FLD><FLD>dfsgsdfgdfsgfd;NEW-0aad-440a-629c-3e8f7eda4632</FLD> 

this.model.get('value_long').match(/[<FLD>\w+;](NEW[-|\d|\w]+)[</FLD>]/g)

返回:

[";NEW-7db5-32a8-c907-82cd82206788<", ";NEW-480e-e87c-75dc-d70cd731c664<", ";NEW-0aad-440a-629c-3e8f7eda4632<"] 

什麼是錯我的正則表達式,這是撿起前面的;並追蹤<

這裏是正則表達式的鏈接 http://regexr.com?30k3m

更新時間:

這就是我想返回:

["NEW-7db5-32a8-c907-82cd82206788", "NEW-480e-e87c-75dc-d70cd731c664", "NEW-0aad-440a-629c-3e8f7eda4632"] 

這裏是一個的jsfiddle它

http://jsfiddle.net/mwagner72/HHMLK/

回答

2

方括號創建一個角色類,你不希望他再次,嘗試改變你的正則表達式如下:

<FLD>\w+;(NEW[-\d\w]+)</FLD> 

因爲它看起來像你想從每場比賽搶捕獲組,您可以使用下面的代碼來構建與捕獲組陣列,它:

var regex = /<FLD>\w+;(NEW[\-\d\w]+)<\/FLD>/g; 
var match = regex.exec(string); 
var matches = []; 
while (match !== null) { 
    matches.push(match[1]); 
    match = regex.exec(string); 
} 

[<FLD>\w+;]將匹配在方括號,裏面的人物之一,當我想你真正想要做的是符合所有這些的。對於其他字符類[-|\d|\w],您可以刪除|,因爲它已經隱含在字符類中,|應該僅用於組內的交替。

這裏是新的正則表達式的更新的鏈接:http://jsfiddle.net/RTkzx/1

+0

而且我相信他會要搶第一個捕獲組。似乎試圖剝奪開始和結束的東西。 – 2012-04-11 17:17:51

+0

我很感謝你的迴應,並且我查看了鏈接,但是你的正則表達式不匹配字符串的正確部分。 – theSociableme 2012-04-11 17:48:50

+0

@MarkWagner看到我的編輯,我認爲它現在應該做你想做的。我還包括一個JSfiddle鏈接。 – 2012-04-11 17:57:36