1

因此,我试图仅提取特定图像的名称以及与之一起捕获的图像扩展名。唯一的问题是,有两种非常相似的形式,而两种形式只是图像 url 的显示方式。

第一个网址显示如下

http://www.trollface.com/dolan/images/IMGnameEYEwant.jpg

唯一的问题是有时图像也会以这种方式显示:

http://www.trollface.com/dolan/images/small/IMGnameEYEwant.jpg

现在我知道这无论如何都不优雅,但我必须使用这样的东西:

trollface\.com/dolan/images/(.*?)">

到目前为止,这一直运行良好,因为这两个 URL 非常相似

另一个问题是我需要纯正则表达式的解决方案。没有java,php,javascript什么都没有。甚至试图让它像这样事先尝试每个字母组合,我再次知道这是非常糟糕的方法,但我是一个正则表达式菜鸟:

[ao][gr]e[s/][/i][pm][ra][og][de][us][c/][tp][/r][so][md][au][lc][lt]/(.*?)">

唯一的问题是它总是会首先找到第一个 URL,因为它们非常相似,并且总是会捕获small/我不需要的 URL 部分。

我该怎么做?我在想也许是向前看或向后看,但我没有足够的经验来让这些工作。

编辑:核心是基于 Java 的,但在当前情况下,我不能使用 Java 来帮助解决这个问题:(

4

2 回答 2

2
#http://www.trollface.com/dolan/images/(?:small/)?([^/\#]+)#

正则表达式的解释,在文字匹配之后:

(?: ... )

非捕获组。意思是“匹配这个,但不要传回去。”

... ?

将前一组设为可选。

(  ... )

捕获组

[^/\#]+

任何不是正斜杠或井号标签的字符,一次或多次。您可能不需要在 Java 中转义它。

于 2012-09-25T14:10:22.720 回答
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]);
}
于 2012-09-25T14:19:53.747 回答