过滤掉字符串数量

时间:2014-04-17 07:29:09

标签: javascript php regex string file

我想知道是否可以过滤掉该字符串末尾的帧填充。

new_york.0001.tga

有1000张图片,都有类似的图案:

filename.padding.extension

基本上,我想在我传递函数的任何文件名中找到填充,例如:

new_york.0001.tga应找到0001

s._2234.name.8923482.jpg应找到8923482

s.sdf&#$.s.d__.name.s23444.tiff应找到23444

所有图像名称填充编号,将直接在扩展名之前,这是文件名中唯一连续的内容。

我吮吸正则表达式,并且很想学习如何去做,虽然有些指导可能会有所帮助......

三江源!

5 个答案:

答案 0 :(得分:2)

您可以使用简单的.split()

的JavaScript

var str = "s._2234.name.8923482.jpg";
var arr = str.split('.');
alert(arr[arr.length-2]);

DEMO

编辑:根据评论This doesn't work for s.sdf&#$.s.d__.name.s23444.tiff

更新代码

var str = "s.sdf&#$.s.d__.name.s23444.tiff";
var arr = str.split('.');
var desiredStr = arr[arr.length - 2].match(/\d+/)
alert(desiredStr);

DEMO

答案 1 :(得分:1)

使用\d+\.[a-zA-Z]+(?:$|\s)为了解释这一点,它会查找数字[0-9](这是\d所做的)一次或多次(这是+所做的),只要接下来是.和字母后跟字符串的结尾。

答案 2 :(得分:0)

使用JS,RegExp /\d+\.\D+$/将捕获数字和扩展名。 .split('.')[0]只能获得数字。

答案 3 :(得分:0)

使用preg_match_allarray_pop

<?php
$str='s._2234.name.8923482.jpg';
preg_match_all('/[0-9]+/', $str, $matches);
echo array_pop($matches[0]); //"prints" 8923482

上述正则表达式匹配所有数字,然后使用array_pop()

打印最后匹配的数字

Working Demo

enter image description here

答案 4 :(得分:0)

如果您知道文件名始终采用filename.padding.extension格式,则可以使用该文件:

$files = array("new_york.0001.tga", // Should find 0001
"s._2234.name.8923482.jpg", // Should find 8923482
"s.sdf&#$.s.d__.name.s23444.tiff"); // Should find 23444

foreach ($files as $f) {
    $parts = explode('.', $f);  
    preg_match("/\d+/", $parts[count($parts)-2], $padding);
    echo $padding[0];
}

explode将每个文件名拆分为多个部分,由.分隔。您需要explode d数组的倒数第二个元素。 preg_match用于挑选数字部分。

输出

0001
8923482
23444

或者,您可以使用preg_split

foreach ($files as $f) {
    $split = preg_split("/\.[^\d]*/", $f);
    echo $split[count($split)-2];       
}