1

だから私はそれと一緒にキャプチャされた画像拡張子を持つ特定の画像の名前だけを引っ張ろうとしています。唯一の問題は、2つの非常によく似たフォームと、画像のURLの表示方法のみの2つのフォームがあることです。

最初のURLは次のように表示されます

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

唯一の問題は、画像がこのように表示される場合があることです。

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

今、私はこれが決してエレガントではないことを知っていますが、このようなものが私が使用しなければならないものです:

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

これは、2つのURLが非常に類似しているため、これまで正常に機能していました。

もう1つの問題は、ソリューションが純粋な正規表現である必要があることです。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/)?([^/\#]+)#

リテラル一致後の正規表現の説明:

(?: ... )

非キャプチャグループ。意味「これに一致するが、それを返さないでください」。

... ?

前のグループをオプションにします。

(  ... )

キャプチャグループ

[^/\#]+

スラッシュまたはハッシュタグではない文字を1回以上。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 に答える