Więc próbuję wyciągnąć tylko nazwę określonego obrazu z przechwyconym wraz z nim rozszerzeniem obrazu. Jedynym problemem jest to, że istnieją dwa bardzo podobne formularze i dwie formy tylko sposobu wyświetlania adresu URL obrazu.

Pierwszy adres URL jest wyświetlany mniej więcej tak

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

Jedynym problemem jest to, że czasami obraz jest wyświetlany również w ten sposób:

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

Teraz wiem, że to nie jest w żaden sposób eleganckie, ale musiałem użyć czegoś takiego:

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

Do tej pory działało to dobrze ze względu na podobieństwo tych dwóch adresów URL

Innym problemem jest to, że Potrzebuję rozwiązania, aby było czystym wyrażeniem regularnym. Brak java, php, javascript nic. Nawet próbowałem dosłownie wypróbować każdą kombinację liter przed rozdaniem w ten sposób, co znowu wiem, że jest bardzo złą metodologią, ale jestem noobem regex:

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

Jedynym problemem jest to, że zawsze najpierw znajdzie pierwszy adres URL ze względu na ich podobieństwo, a także zawsze przechwyci część small/ adresu URL, której NIE POTRZEBUJĘ.

Jak mam to zrobić? Myślałem, że może spojrzeć w przyszłość lub w tył, ale nie jestem wystarczająco doświadczony, aby to zadziałało.

EDYTUJ: rdzeń jest oparty na Javie, ale w obecnej sytuacji nie mogę użyć Javy do rozwiązania tego problemu :(

1
Travis Crum 25 wrzesień 2012, 18:03

2 odpowiedzi

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

Wyjaśnienie wyrażenia regularnego, po dosłownym dopasowaniu:

(?: ... )

Grupa nie przechwytująca. Oznacza to „dopasuj to, ale nie oddawaj”.

... ?

Spraw, aby poprzednia grupa była opcjonalna.

(  ... )

Grupa przechwytująca

[^/\#]+

Dowolny znak, który nie jest ukośnikiem ani znacznikiem hash, raz lub więcej razy. Być może nie musisz uciekać od tego w Javie.

2
FrankieTheKneeMan 25 wrzesień 2012, 18:10
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]);
}
0
Louis Ricci 25 wrzesień 2012, 18:19