2016-02-14 1 views
0

Когда мы имеем:Извлечение ЦСИ ссылку из IMG тега с определенным именем класса с использованием регулярных выражений

<img src="http://example.com/myimageurl.jpg" /> 
<img class="my-image-class" src="http://example.com/myimageurl2.jpg" /> 

С Grep:

grep -Po '(?<=src=")[^"]*' filename 

Я гот оба изображения URL.

На самом деле мне нужен только URL-адрес изображения с определенным классом «my-image-class».

Как я могу это достичь?

Заранее благодарен!

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

ответ

0

Вы не должны анализировать html с регулярным выражением, но если вы ищете быстрый grep
regex, это работает.

<img\s+(?=[^>]*?(?<=\s)class\s*=\s*"my-image-class")[^>]*?(?<=\ssrc=")([^"]*) 

Expanded

<img \s+ 
(?= 
     [^>]*? 
     (?<= \s) 
     class \s* = \s* "my-image-class" 
) 
[^>]*? 
(?<= \s src=") 
([^"]*)      # (1) 

Выход

** Grp 0 - (pos 49 , len 67) 
<img class="my-image-class" src="http://example.com/myimageurl2.jpg 
** Grp 1 - (pos 82 , len 34) 
http://example.com/myimageurl2.jpg 
+0

SLn, я на самом деле пишу это как файл сценария оболочки, поэтому я буду придерживаться grep. Ваше предложение работает частично потому, что мне нужен только URL http://example.com/myimageurl2.jpg, а не весь тег IMG. – Peter

+0

@Peter - Не grep дает вам целую линию, или это просто матч? Ну, плохая новость заключается в том, что вы не можете сопоставлять только jpeg при поиске класса. 20-летний опыт говорит мне об этом. Btw, jpeg находится в группе захвата 1. Разве вы не можете получить это без grep? Опция заключается в том, что Perl, который он использует, поддерживает '\ K', тогда вы можете использовать' ] *? (? <= \ S) class \ s * = \ s * "my-image-class") [^> ] *? (? <= \ ssrc = ") \ K [^"] * ' – sln

+0

Большое спасибо, sln! Это сработало отлично! Ты спас мне много времени и сил! – Peter

0

Не уверен, что ваш случай использования здесь, но вы можете легко сделать это, вставив свой HTML в сайт как http://jsbin.com и писать несколько линии jQuery:

var imgs = []; 

$('img').each(function() { 
    var $img = $(this); 

    if($img.hasClass('my-image-class')) { 
    imgs.push($img.attr('src')); 
    } 
}); 

console.log(imgs); 

Demo: http://jsbin.com/cicoli/edit?html,js,console,output

Смежные вопросы