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 :(
2 odpowiedzi
#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.
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]);
}
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].