0

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

var 文件名 = 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);
4

6 回答 6

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);
于 2012-09-28T05:35:22.757 回答
0

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

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

于 2012-09-28T05:35:29.437 回答
0
var num=parseInt(filename.replace(/^.*?([0-9]+).jpg$/i,"$1"),10);
于 2012-09-28T05:35:31.487 回答
0

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

var num = +filename.substring(
  filename.lastIndexOf('_') + 1,
  filename.lastIndexOf('.')
);
于 2012-09-28T05:36:29.747 回答
0

试试这个:

'2012_honda_odyssey_passenger-minivan_ex_s_oem_2_300.jpg'.match(/[0-9]+(?=\.jpg)/)[0]
于 2012-09-28T05:39:34.220 回答
-1

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

var start = filename.lastIndexOf('_') + 1; 
var end = filename.lastIndexOf('.');
var num = parseInt(filename.substring(start, end), 10);
于 2012-09-28T05:37:59.763 回答