如何在JavaScript和正则表达式中从字符串中提取数字?

时间:2012-09-28 05:32:46

标签: javascript regex

使用javascript - 我需要提取并检查“jpg”文件扩展名之前出现的数字,在本例中为“300”。

var filename = 2012_honda_odyssey_passenger-minivan_ex_s_oem_2_300.jpg

将这个数字拉出来的最佳方式是什么 - 我总是可以假设它将位于字符串中的最后一个“_”和最后一个“。”之间。在文件扩展名之前。

我猜我需要用正则表达式做点什么。像这样....

var num = parseInt(filename.match(/some-regex-here/), 10);

除了

我确实想到了......但它看起来非常笨拙。

var filename = "2012_honda_odyssey_passenger-minivan_ex_s_oem_2_300.jpg";
var num = parseInt(filename.split('_').splice(-1,1).toString().split(".").splice(0,1).toString(), 10);

6 个答案:

答案 0 :(得分:1)

var filename = "2012_honda_odyssey_passenger-minivan_ex_s_oem_2_300.jpg";
var regex = /^.*_(\d+)\.jpg?$/;
var match = regex.exec(filename);
var number = Number(match[1]);

console.log(number);

答案 1 :(得分:0)

这样的正则表达式:_(\d+)\..+?$应该允许您匹配并将数字提取到组中。上面的正则表达式应匹配下划线(_)后跟一个或多个数字(\d+),后跟一个句点(\.),后面跟着一些字母({{ 1}})最后是字符串的结尾(.+?)。

然后,您可以参考this以前的SO问题,了解以后如何访问这些群组。

答案 2 :(得分:0)

var num=parseInt(filename.replace(/^.*?([0-9]+).jpg$/i,"$1"),10);

答案 3 :(得分:0)

避免使用正则表达式通常是最好的,除非您通常进行复杂的字符串模式匹配。类似的东西会得到你想要的东西:

var num = +filename.substring(
  filename.lastIndexOf('_') + 1,
  filename.lastIndexOf('.')
);

答案 4 :(得分:0)

试试这个:

'2012_honda_odyssey_passenger-minivan_ex_s_oem_2_300.jpg'.match(/[0-9]+(?=\.jpg)/)[0]

答案 5 :(得分:-1)

我觉得正则表达式对于这么简单的事情来说太过分了,我只想用它:

var start = filename.lastIndexOf('_') + 1; 
var end = filename.lastIndexOf('.');
var num = parseInt(filename.substring(start, end), 10);