我有一个字符串:
var doi_id= "10.3390/metabo1010001"
我想只匹配最后的第一个数字系列。
为此,我正在使用此regEx:
var doinumericpart = doi_id.match(/(\d*)$/);
“问题”(或不是)是doinumericpart返回
1010001,1010001
而不是1010001,我不知道为什么。
当我在这里尝试这个正则表达式时:http://regexr.com?31htm一切似乎都正常。
非常感谢您的帮助。
答案 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
是第一个捕获组