2013-01-16 90 views
0

代码:正则表达式串变换/提取

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

我怎样才能得到589944494365122出使用正则表达式该字符串的?

我到目前为止做的最好的是_(.*)导致589944494365122_1446403980_n.jpg

+0

是URL静态的?或者周围的值改变了吗? –

+0

是的,他们会改变 – kristjanzzz

回答

1

我会\d+_(\d+)_\d+_n\.jpg去,但根据URL的确切的规格,这可能需要的调整的一点点。

也取决于语言,这可能需要稍微改变一点。我建议的解决方案将用于例如Ruby(以及许多其他正则表达式实现)。这里\d匹配任何数字,\d+表示一个或多个数字。我认为.jpg前面的字母总是n但你可以由替换n.(任何字符)或\w(任何单词字符)改变这一点。

+0

为了避免混淆,我觉得最好是以“规范”形式显示正则表达式。换句话说,除非你用(例如)一个Java字符串的形式(例如'\\ d +“')呈现正则表达式,否则不要加倍反斜杠。 –

+0

我曾经写过类似这样的正则表达式,但我经常遇到这个问题'但是你的正则表达式不适用于X语言',结果原因是反冲没有被转义。因此,为了节省一个答案,我现在添加'逃脱'版本。 –

2

首先,你应当概括您的问题描述,这样的:我怎样才能在字符串中的第一个_后位数最长的非空字符串?你字面上要求的正则表达式是(589944494365122),但那不是你所期望的。

据我你想要什么猜测,答案可能是_(\d+)

+0

描述缺乏质量造成我的语言障碍和正则表达式的经验。你的答案完成了这项工作。万分感谢。 – kristjanzzz

1

提取的,我可以在你输入看到的规律是:

'(?<=\d_)\d+(?=_\d)' 

使用grep测试:

211099_589944494365122_1446403980 
[0-9]+_ part we want _[0-9]+ 

所以与向后看,并先行将帮助正则表达式

kent$ echo " https://aaa.bbb.net/ccc/211099_589944494365122_1446403980_n.jpg"|grep -Po '(?<=\d_)\d+(?=_\d)' 
589944494365122 
1

This works;

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