Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения (https://javascript.ru/forum/misc/58445-regulyarnye-vyrazheniya.html)

antiwindows 22.09.2015 12:55

Регулярные выражения
 
с помощью регулярных выражений надо вытащить из исходного кода название продукта. Это то что стоит в ковычках после слова title (т.е. "Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz"):

<a class="a-link-normal s-access-detail-page a-text-normal" title="Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz" href="http://www.amazon.de/Leitz-24230095-Stehsammler-Hartpappe schwarz/dp/B0007OEHFS/ref=sr_1_1?ie=UTF8&amp;qid=1442901446&amp;sr=8-1&amp;keywords=Leitz+24230095"><h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz</h2></a>

Примерно выражение выглядит так:
<a class=\"[^\"]*title\"(.*?)</a>
Но это выражение не работает. Помогите кто может! :help:

рони 22.09.2015 13:07

antiwindows,
а зачем регулярка?

рони 22.09.2015 13:08

antiwindows,
<a class="a-link-normal s-access-detail-page a-text-normal" title="Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz" href="http://www.amazon.de/Leitz-24230095-Stehsammler-Hartpappe schwarz/dp/B0007OEHFS/ref=sr_1_1?ie=UTF8&amp;qid=1442901446&amp;sr=8-1&amp;keywords=Leitz+24230095"><h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz</h2></a>
<script>
alert(document.links[0].title);
</script>

antiwindows 22.09.2015 13:20

Благодарю за быстрый ответ, но необходимо именно регулярное выражение. Результат должен выдаваться построчно.

var man_name = "Leitz";
var man_art_nr = "24230095";
var searchUrlAmazon = "http://www.amazon.de/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=";

var searchVar = encodeURI(man_name + " " + man_art_nr);

var amazonSite = loadURL(searchUrlAmazon + searchVar).replace(/\n/g,'').replace(/\r/g,'');
var amTitel = new RegExp('ЗДЕСЬ ДОЛЖНА СТОЯТЬ РЕГУЛЯРКА','g');
var match = amTitel.exec(amazonSite);

for (var i=0; i < 5; i++){
writeln('Titel: ' + match[1]);
fwrite(fh,'Titel: ' + match[1] + '\n');
match = amTitel.exec(amazonSite);
}

writeln("stop Titel");
writeln("\n");

рони 22.09.2015 13:28

Цитата:

Сообщение от antiwindows
Результат должен выдаваться построчно.

не осилил ... в любом случае если вам нужно title ссылки нужды в регулярке нет.

рони 22.09.2015 13:31

antiwindows,
var a = '<a class="a-link-normal s-access-detail-page a-text-normal" title="Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz" href="http://www.amazon.de/Leitz-24230095-Stehsammler-Hartpappe schwarz/dp/B0007OEHFS/ref=sr_1_1?ie=UTF8&amp;qid=1442901446&amp;sr=8-1&amp;keywords=Leitz+24230095"><h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz</h2></a>'
var div = document.createElement('div');
div.innerHTML = a;
alert(div.querySelector('a').title);

antiwindows 22.09.2015 14:23

Спасибо за идею, она мне пригодится, если буду решать эту задачу в чистом яваскрипте, но на данный момент нужна именно регулярка

Aetae 22.09.2015 15:02

/\btitle\s*=\s*"(.*?)"/

antiwindows 22.09.2015 17:13

Aetae, спасибо огромное! Но если задаю Вашу регулярку в эвалюаторе, то название находит. Если вставляю её как есть в свой код, то выдаёт ошибку:

Script Exception!
File: H:\svn\test\test.js
Line: 45
Pos : 0
Msg : [222] TypeError: match is null

Как я понимаю, необходимо ключевое слово по которому ведётся поиск по исходному коду. Есть возможность оформить эту (/\btitle\s*=\s*"(.*?)"/) регулярку как в примере:

<span class="a-size-base a-color-price s-price a-text-bold">EUR 5,50</span>
Регулярка для этого исходного кода:
<span class=\"[^\"]*s-price[^\"]*\"[^>]*>(.*?)</span>

?

antiwindows 24.09.2015 12:21

Решение найдено. Несколько регулярок, которые выдают то что нужно:
<a[^>]+title="([^"]+)"
title=\"(.+?)\"'
title=\"([^\"]+)\"

огромное спасибо всем!

ksa 24.09.2015 13:02

Мои 5коп... :)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
window.onload=function(){
	var txt=document.getElementById('test').innerHTML;
	alert(txt.match(/title="[^"]*"/g)[0].split('"')[1]);
};
</script>
</head>
<body>
<div id='test'>
	<a class="a-link-normal s-access-detail-page a-text-normal" title="Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz" href="http://www.amazon.de/Leitz-24230095-Stehsammler-Hartpappe schwarz/dp/B0007OEHFS/ref=sr_1_1?ie=UTF8&amp;qid=1442901446&amp;sr=8-1&amp;keywords=Leitz+24230095">
		<h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">
			Leitz 24230095 Stehsammler, A4, Hartpappe, schwarz
		</h2>
	</a>
</div>
</body>
</html>

рони 24.09.2015 15:21

ksa,
а вдруг кавычки одинарные будут? :)

ksa 24.09.2015 15:25

рони, а вдруг нет... :D

sortarray 24.09.2015 16:48

Цитата:

Сообщение от рони
а вдруг кавычки одинарные будут?

Цитата:

Сообщение от ksa
рони, а вдруг нет...

Так всегда надо обрабатывать оба случая.

sortarray 24.09.2015 16:51

Цитата:

Сообщение от ksa
рони, а вдруг нет...

В твоем случае
title=['"][^"']*['"]/g


Это что трудно? Кроме того, ты не обработал случаи пробельных символов и тд, не выделил границы слова, полностью лень разбираться.

ksa 24.09.2015 16:57

Цитата:

Сообщение от sortarray
полностью лень разбираться

И мне то же. :D
Мой пример сделан исключительно под тестовые данные ТСа и не более того. Что с ни делать пусть каждый решает сам. ;)

sortarray 24.09.2015 17:02

ksa,
Вот так примерно твоя регулярка должна выглядеть
var s = "bala foo='1'blafoo='2' bla foo=\"3\"bla" 
console.log(s.match(/\bfoo\s*=\s*["'][^'"]*["']/g)) 
//>>>[ 'foo=\'1\'', 'foo="3"' ]

ksa 25.09.2015 08:27

Цитата:

Сообщение от sortarray
Вот так примерно твоя регулярка должна выглядеть

Ты спец - тебе видней...

Но бывают случаи когда нужно просто взять молоток и забить. ;)


Часовой пояс GMT +3, время: 17:14.