Javascript和RegEx:match函数返回一个数组

时间:2012-07-16 14:48:15

标签: javascript regex

我有一个字符串:

var doi_id= "10.3390/metabo1010001"

我想只匹配最后的第一个数字系列。

为此,我正在使用此regEx:

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

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

1010001,1010001

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

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

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:8)

match()返回一个类似于它应该的数组。第一个元素是与模式匹配的整个子字符串,然后第一个元素包含子模式。

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

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

[0]取消引用数组,为您提供所需的确切元素。

答案 1 :(得分:4)

match返回null或匹配数组。匹配量取决于正则表达式中的捕获组数量。 [1]上的项目将是您的匹配项,您可以这样做:

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

答案 2 :(得分:2)

match会返回完整匹配和每个捕获组,如果没有匹配则返回null

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

"10.3390/metabo1010001".match(/metabo(\d*)/)
// => ["metabo1010001", "1010001"]
  • metabo1010001是整场比赛
  • 1010001是第一个捕获组