因此,我试图仅使用随之捕获的图像扩展名来提取某些图像的名称。唯一的问题是,有两种非常相似的形式和两种形式,只有图像网址的显示方式。
第一个网址是这样的
http://www.trollface.com/dolan/images/IMGnameEYEwant.jpg
唯一的问题是偶尔也会以这种方式显示图像:
http://www.trollface.com/dolan/images/small/IMGnameEYEwant.jpg
现在我知道这不是优雅的,但是我必须使用这样的东西:
trollface\.com/dolan/images/(.*?)">
由于两个网址的相似程度
,到目前为止一直很好另一个问题是我需要解决方案是纯正则表达式。没有java,php,javascript什么都没有。甚至试图让它真的尝试每个字母组合之前这样,我知道这是非常糟糕的方法,但我是一个正则表达式noob:
[ao][gr]e[s/][/i][pm][ra][og][de][us][c/][tp][/r][so][md][au][lc][lt]/(.*?)">
唯一的问题是它总会首先找到第一个URL,因为它们有多么相似,并且也总是捕获我不需要的URL的small/
部分。
我该怎么做?我当时想的可能是前瞻或后视,但我没有足够的经验让这些工作。
编辑:核心是基于Java的,但在目前的情况下,我无法使用Java来解决这个问题:(
答案 0 :(得分:2)
#http://www.trollface.com/dolan/images/(?:small/)?([^/\#]+)#
在文字匹配之后对正则表达式的解释:
(?: ... )
非捕获组。含义"匹配此,但不要将其传回。"
... ?
使上一组可选。
( ... )
捕获组
[^/\#]+
任何不是正斜杠或散列标记的字符,一次或多次。你可能不需要在Java中逃避这一点。
答案 1 :(得分:0)
var test1="http://www.trollface.com/dolan/images/IMGnameEYEwant.jpg";
var test2="http://www.trollface.com/dolan/images/small/IMGnameEYEwant.jpg";
var test3="http://google.com/";
var rx = /(http:\/\/www\.trollface\.com\/dolan\/images\/)(?:small)?(.+)/i;
var m = test1.match(rx);
if(m.length == 3) {
alert(m[1]);
alert(m[2]);
}
var m = test2.match(rx);
if(m.length == 3) {
alert(m[1]);
alert(m[2]);
}
var m = test3.match(rx);
if(m.length == 3) {
alert(m[1]);
alert(m[2]);
}