js REGEX |在字符串中获取最后两组数字,如何?

时间:2014-04-04 03:15:51

标签: javascript regex numbers

我有这种格式的字符串:

  

6b255c1c689e2e7ee88e6d5d8ab10e9b_307_17234.jpg

     

8b342878cb8d848608d422a2c02b5e32_7_240723.jpg

     

07e8e2376d12e2d20a1e4c2159569c43_243_141599.jpg

你如何得到最后两组数字?

例如, 在

  

07e8e2376d12e2d20a1e4c2159569c43_243_141599.jpg

我想得到:

  

07e8e2376d12e2d20a1e4c2159569c43_ 243_141599 .jpg 只有数字以粗体显示下划线

有可能?? .....

我尝试过: var getDigts = str.split('_'), //this way is ok but I have to split again the getDigts[2] as in str2.split(".") to get rid of the DOT.

使用普通split,是否有一种变通方法或比REGEX加倍更快的内容? THX

修改

我尝试使用str.match(/(\d+_\d+).jpg/)[1]按照@Michael Best的建议...刚刚经历过一次大的错误:原因是因为我循环遍历每个字符串以获取数字...现在,应该有类似的东西:

  

6b255c1c689e2e7ee88e6d5d8ab10e9b_307_17234.jpg   8b342878cb8d848608d422a2c02b5e32_7_240723.jpg   649ff5658ad274d8cee67b1f6d34600c_90_182456.png   07e8e2376d12e2d20a1e4c2159569c43_243_141599.jpg

请注意: .png 行。是否有REGEX同时匹配.jpg和/或.png

我尝试从jpg中移除.jpg,例如str.match(/(\d+_\d+)./)[1],但是当涉及到字符串时,这会失败:07e8e2376d12e2d20a1e4c2159569c43_243_141599.jpg

它返回

  

07e8e2376d12e2d20a1e4c 2159569c43_243 _141599.jpg

而不是

  

07e8e2376d12e2d20a1e4c2159569c43_的 243_141599 .JPG

非常感谢任何帮助...

3 个答案:

答案 0 :(得分:2)

这是一个快速而肮脏的正则表达式:

var nums = str.match(/(\d+_\d+)\.\w+$/)[1];

答案 1 :(得分:2)

您可以尝试:

str.match(/(\d+_\d+).JPG|PNG/i)[1]

当您说:.JPG|.PNG并在最后添加i时,您告诉脚本以不区分大小写的方式查找这些扩展名。

因此它会匹配.jpg.png

希望有所帮助

答案 2 :(得分:2)

你应该试试这个正则表达式。

str.match(/(\d+_\d+)\.(?:jpg|png)/i)[1]

Regular expression visualization

Debuggex Demo

.也必须进行转义。 .是几乎所有角色的通配符。如果没有逃脱,那么

1233242_34243_3224_png_3424_34342.jpg

应该给出错误的匹配34243_3224

由于使用不区分大小写i - 标记 PNG png (JPG,jpg)将匹配为扩展名。