正则表达式字符串转换/提取

时间:2013-01-16 21:01:55

标签: regex string

代码:

https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg

如何使用正则表达式从字符串中获取589944494365122

到目前为止,我能做的最好的事情是_(.*) 589944494365122_1446403980_n.jpg

4 个答案:

答案 0 :(得分:2)

首先,您应该概括您的问题描述,例如:如何在字符串中的第一个_之后获得最长的非空数字子串?你真正要求的正则表达式是(589944494365122),但这不是你所期望的。

根据我对你想要的猜测,答案可能是_(\d+)

答案 1 :(得分:1)

我会选择\d+_(\d+)_\d+_n\.jpg,但根据网址的确切规格,这可能需要稍微调整一下。

另外,根据语言的不同,可能需要稍作修改。我建议的解决方案将在Ruby(以及许多其他正则表达式实现)中使用。这里\d匹配任何数字,\d+表示一个或多个数字。我认为.jpg之前的字母始终为n,但您可以通过将n替换为.(任何字符)或\w(任何字词)来更改此字母字符)。

答案 2 :(得分:1)

我可以在您的输入中看到提取规则:

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

答案 3 :(得分:1)

这有效;

var s = "https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg";
var m = /_([^_]*)/.exec(s);
console.log( m[1] ); // 589944494365122
相关问题