1

我有一个字符串:

var doi_id= "10.3390/metabo1010001"

我只想匹配最后的第一组数字。

为此,我正在使用这个正则表达式:

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

“问题”(或不是)是 doinumericpart 返回

1010001,1010001

而不是 1010001 我不知道为什么。

当我在这里尝试这个正则表达式时:http ://regexr.com?31htm一切似乎都很好。

非常感谢你的帮助。

4

3 回答 3

8

match()返回一个应有的数组。第一个元素是与模式匹配的整个子字符串,然后第一个元素开始包含子模式。

在您的情况下,只需摆脱()- 您不需要它们,因为它们包含整个模式。

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

[0]取消引用数组以提供您想要的确切元素。

于 2012-07-16T14:50:47.427 回答
4

match返回null匹配项或匹配项的数组。匹配的数量取决于您的正则表达式中有多少个捕获组。该项目[1]将是您的匹配项,因此您可以执行以下操作:

var doinumericpart = doi_id.match(/(\d*)$/)[1]; //Access second item in the matches array
于 2012-07-16T14:50:23.387 回答
2

match返回完整的匹配项和每个捕获组,或者null如果没有匹配项。

如果您想提供一些上下文,这很有用:

"10.3390/metabo1010001".match(/metabo(\d*)/)
// => ["metabo1010001", "1010001"]
  • metabo1010001是整场比赛
  • 1010001是第一个捕获组
于 2012-07-16T14:51:12.263 回答