代码:
https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg
如何589944494365122
使用正则表达式摆脱该字符串?
到目前为止我能做的最好的事情_(.*)
就是589944494365122_1446403980_n.jpg
首先,您应该概括您的问题描述,如下所示:如何在第一个字符串之后获得最长的非空数字子_
字符串?您真正要求的正则表达式是(589944494365122)
,但这不是您所期望的。
根据我对你想要什么的猜测,答案可能是_(\d+)
.
这行得通;
var s = "https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg";
var m = /_([^_]*)/.exec(s);
console.log( m[1] ); // 589944494365122
我可以在您的输入中看到的提取规则是:
211099_589944494365122_1446403980
[0-9]+_ part we want _[0-9]+
因此,具有后视和前瞻的正则表达式将有所帮助:
'(?<=\d_)\d+(?=_\d)'
用 grep 测试:
kent$ echo " https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg"|grep -Po '(?<=\d_)\d+(?=_\d)'
589944494365122
我会选择\d+_(\d+)_\d+_n\.jpg
,但根据 URL 的确切规范,这可能需要一些调整。
同样取决于语言,这可能需要稍作改动。我建议的解决方案例如可以在 Ruby 中工作(以及许多其他正则表达式实现)。这里\d
匹配任何数字,\d+
表示一个或多个数字。我假设之前的字母.jpg
总是n
,但您可以通过替换n
为.
(任何字符)或替换为\w
(任何单词字符)来更改它。