2012-07-16 63 views
1

我有一個字符串:Javascript和正則表達式:匹配函數返回一個數組

var doi_id= "10.3390/metabo1010001" 

而且我想只匹配從最終數字的第一系列。

對於這一點,我用這正則表達式:

var doinumericpart = doi_id.match(/(\d*)$/); 

「問題」(或沒有)是doinumericpart返回

1010001,1010001 

,而不是1010001,我不知道爲什麼。

當我在這裏嘗試這個正則表達式:http://regexr.com?31htm一切似乎工作正常。

非常感謝您的幫助。

+0

嘗試後'\去掉括號d *'並且只有'\ d * $' – 2012-07-16 14:52:18

回答

8

match()像它應該返回一個數組。第一個元素是匹配模式的整個子字符串,然後第一個元素包含子模式。

在你的情況,只是擺脫() - 你不需要他們,因爲他們把整個模式。

var doinumericpart = doi_id.match(/\d*$/)[0]; 

[0]取消引用數組以提供所需的確切元素。

+0

謝謝Kolink,這解決了我的問題。 – 2012-07-16 14:55:33

+0

選擇答案作爲接受的答案然後:)給男人一些功勞 – 2012-07-16 15:08:36

4

match返回null或匹配數組。匹配的數量取決於你在正則表達式中有多少個捕獲組。在[1]該項目將成爲你的對手,所以你可以這樣做:

var doinumericpart = doi_id.match(/(\d*)$/)[1]; //Access second item in the matches array 
+0

謝謝Esailija – 2012-07-16 14:56:10

2

match返回完整匹配和每個捕獲組或null如果沒有匹配。

,如果你想提供一些背景,這非常有用:

"10.3390/metabo1010001".match(/metabo(\d*)/) 
// => ["metabo1010001", "1010001"] 
  • metabo1010001是整場比賽
  • 1010001是第一個捕獲組
+0

謝謝斯特凡 – 2012-07-16 14:55:47

相關問題