2009-10-26 27 views
1

我有一個javascript函數,它在某些模式下看起來是元素id。所以,我有以下腳本:JavaScript:string.match正則表達式幫助

if (f.elements[i].id.match(/DataList\[-\d{3}|\d{3}\]\.MemberId/)) { 
    //do something 
} 

它應與IDS如這些元素:

DataList[-1].MemberId 
DataList[-2].MemberId 

而且它,但它也符合以下幾點:

DataList[-1].FirstName 
DataList[-2].FirstName 

這我不想要。

任何大師都可以看看上面的正則表達式,並指出發生了什麼問題嗎?

感謝,

卡倫

+0

爲您發佈,以配合您所列出的元素名正則表達式,你需要改變'\ d {3}'到'\ d {1,3}'。請參閱@ Macarse的答案,以便對發生的事情有一個很好的解釋。 – 2009-10-26 17:26:00

回答

2

嘗試錨您正則表達式在與^開始和一個$年底,集團的數字匹配,並允許,而不是僅僅1-3共3個位數。

if (f.elements[i].id.match(/^DataList\[(-\d{1,3}|\d{1,3})\]\.MemberId$/)) { 
    //do something 
} 

你的方式,它匹配任何包含「DataList [-123」或包含「123」.MemberId「」。

是完成同樣的事情更簡單的整體正則表達式是:

if (f.elements[i].id.match(/^DataList\[-?\d{1,3}\]\.MemberId$/)) { 
    //do something 
} 
+1

非常感謝Asaph。我正在使用第一個解決方案。感謝Macarse – 2009-10-26 17:35:09

2

的或者是說:

DataList\[-\d{3} OR \d{3}\]\.MemberId/ 

此正則表達式正確匹配:

DataList\[-?\d{1,3}\]\.MemberId 
+0

,這是問題的根源。 – 2009-10-26 17:34:23

1

我的建議

if (f.elements[i].id.match(/DataList\[-[0-9]{1,3}\]\.MemberId/)) { 
    } 

的{}決定你要多少#分別支持這麼1-3將匹配萬國郵聯[999]