正则求助:选中末尾倒数第一组数字

2015-06-02 20:21:51 +08:00
 zjuster
例如“更新至44集 | 共48集” or “全48集”,要选择48。

具体的需求是将48选中,其余内容删掉。删内容这个已经有现成的工具和函数,现在苦恼于如何只选中48。(如果是共123集,要选择123)。

replace([^\d],) 直接删除非数字之后的结果是“4448”,考虑在处理掉44,但是似乎无法处理123的例子

replace(.*\s[^\d],) 在第一个pattern里可以选中“48集”,这个集又去不掉了,“全48集”的全也去不掉

苦恼...
1962 次点击
所在节点    正则表达式
8 条回复
zjuster
2015-06-02 20:24:31 +08:00
replace (.*[^\d]([0-9]+)[^\d],\1)

居然用这个成功选择并替换出了这个数字。但是我也不知道为什么。

有人能帮我解释下吗。
Septembers
2015-06-02 20:36:05 +08:00
see https://www.debuggex.com/r/37PdOIb3p445uFvA



> /共(\d+)集/.exec('更新至44集 | 共48集')
< ["共48集", "48"]
> /(\d+)集$/.exec('更新至44集 | 共48集')
< ["共48集", "48"]
see http://deerchao.net/tutorials/regex/regex.htm
tcsky
2015-06-02 20:46:43 +08:00
(\d+)\D+(\d+)
zjuster
2015-06-02 21:04:14 +08:00
@Septembers 谢谢。这个帖子正是我入门的学习贴。还是有很长的路要走。
rrkelee
2015-06-02 21:29:04 +08:00
```
function get_last_num($str){

preg_match_all('/\d+/', $str, $matches);

return end( $matches[0] );

}
```

PHP 大法好。
omph
2015-06-02 22:25:03 +08:00
Honwhy
2015-06-02 22:26:04 +08:00
第一个笨办法:

[code]
var str = "更新至44集 | 共48集";
var arr = [];
str.split(/[^\d]+/g).forEach(function(value){
if(!!value) {
arr[arr.length] = value;
}
});

console.log(arr[arr.length-1]);
[/code]
Honwhy
2015-06-02 22:29:35 +08:00
@Honwhy
第二种办法:
var m = /\D*(\d+)\D*$/.exec(str);
if(m != null) {
console.log(m[1]);
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX