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

LungDesire 05.01.2016 20:55

Регулярные выражения!
 
Доброго времени суток друзья!
В переменной mass хранятся html теги, из которых нужно выбрать следующее:

"Москва" из => "Город: <strong>Москва</strong>"

"121299294" и "79030116***" из => "Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=121299294">79030116***</a>"

"1 099 000 руб." из => Цена: <strong>1 099 000 руб.</strong>

"-337 220 руб." из => "Рассчетное отклонение: <strong><span tooltip="628" style="color: #009900;">-337 220 руб.</span></strong>"

"8" из => "Количество объявлений: <strong style="color: red;font-size: 10pt;" >8</strong>"

"2" из => "Количество различных машин: <strong style="color: red;font-size: 10pt;" >2</strong>"

Спасибо за внимание, буду признателен за любую помощь. Удачи Вам друзья =)

Keramet 06.01.2016 20:57

А структуру mass можете показать? (это объект или массив?)

LungDesire 06.01.2016 23:45

В mass просто ответ от web страницы. Банальные html теги. Вряд ли тут будут смотреться html теги полной страницы)) Многовато выходит. Структура mass вероятнее всего - объект)

LungDesire 06.01.2016 23:54

Вот кусочек из mass:
<div><span id="exists"></span><table class=sale-info cellspacing=4 width=100% style="text-align: left; font-size:10pt; border:none;
font-weight: normal; font-family: Tahoma;"><tr style="border:none"><td style="text-align: left; border:none">Дата и время выхода:
<strong>04.01.2016 23:05</strong></td></tr><tr style="border:none"><td style="text-align: left; border:none">Город: <strong>Москва</strong>
</td></tr><tr style="border:none"><td style="text-align: left; border:none">
Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=121825824">79099728***</a>
</td></tr></tr><tr style="border:none"><td style="text-align: left; border:none">
Сотовый оператор: г. Москва и Московская область</td></tr>
<tr style="border:none"><td style="text-align: left; border:none">Цена: <strong>1 099 000 руб.</strong></td>
</tr><tr style="border:none"><td style="text-align: left; border:none">Рассчетное отклонение:
<strong><span tooltip="628" style="color: #009900;">-337 220 руб.</span></strong></td></tr><tr style="border:none">
<td style="text-align: left; border:none"><br />Количество объявлений:
<strong style="color: red;font-size: 10pt;" >78</strong><br />Количество различных машин: <strong style="color: red;font-size: 10pt;" >22</strong>
<br /><br /><br clear="all"/>

Как видно значения, которые необходимо извлечь - меняются!

Deff 07.01.2016 05:38

Вариант:
<script type="text/javascript">
window.onload = function() {
var str = document.getElementById('text').innerHTML;
alert(str.replace(/<[^<>]*>/gm,''));
};
</script>


<div id="text" style="display:none">


<div><span id="exists"></span><table class=sale-info cellspacing=4 width=100% style="text-align: left; font-size:10pt; border:none;
 font-weight: normal; font-family: Tahoma;"><tr style="border:none"><td style="text-align: left; border:none">Дата и время выхода:
 <strong>04.01.2016 23:05</strong></td></tr><tr style="border:none"><td style="text-align: left; border:none">Город: <strong>Москва</strong>
 </td></tr><tr style="border:none"><td style="text-align: left; border:none">
 Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=121825824">79099728***</a>
 </td></tr></tr><tr style="border:none"><td style="text-align: left; border:none">
 Сотовый оператор: г. Москва и Московская область</td></tr>
 <tr style="border:none"><td style="text-align: left; border:none">Цена: <strong>1 099 000 руб.</strong></td>
 </tr><tr style="border:none"><td style="text-align: left; border:none">Рассчетное отклонение: 
 <strong><span tooltip="628" style="color: #009900;">-337 220 руб.</span></strong></td></tr><tr style="border:none">
 <td style="text-align: left; border:none"><br />Количество объявлений: 
 <strong style="color: red;font-size: 10pt;" >78</strong><br />Количество различных машин: <strong style="color: red;font-size: 10pt;" >22</strong>
 <br /><br /><br clear="all"/>

</div>

</body>

LungDesire 07.01.2016 06:18

Спасибо за совет. Непременно учту ваше регулярное выражение =)

Keramet 07.01.2016 11:52

А на выходе что вы хотите получить? объект типа:
var rezult = {
   city:    "",
   offerId: "",
   phone:   "",
   ...
   kolAvto: ""
};

или что-то другое?
И сколько из mass надо результатов? (из каждой mass 1 результат, или в mass может быть сколько угодно результатов?

LungDesire 08.01.2016 16:37

Из mass по сути необходимо выбрать: [04.01.2016 23:05], [Москва], [121825824],[79099728***], [1 099 000 руб.],[-337 220 руб.],[78],[22]. В целом у каждого значения своё имя, так же как вы указали выше. Это возможно?

LungDesire 08.01.2016 16:39

В mass полный ответ от web страницы, так что все строки для поиска будут в mass - сколько угодно результатов!

Keramet 08.01.2016 21:08

А если так попробовать:
<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8"/>
	<title>IiT</title>
	<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
        <script>
		$(function() {
			var values = [],     // массив искомых значений
				txt;
			$("td").each(function(n) {
				txt = this.innerText;
				values.push( txt.substring(txt.indexOf(':')+1).trim() );
			});
			alert(values);
		});
	</script>
</head>

<body>
	<div><span id="exists"></span>
		<table class=sale-info cellspacing=4 width=100% style="text-align: left; font-size:10pt; border:none; font-weight: normal; font-family: Tahoma;">
			<tr style="border:none">
				<td style="text-align: left; border:none">Дата и время выхода:<strong>04.01.2016 23:05</strong></td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Город: <strong>Москва</strong></td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=121825824">79099728***</a></td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Сотовый оператор: г. Москва и Московская область</td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Цена: <strong>1 099 000 руб.</strong></td>
			</tr>
			<tr style="border:none">
			<td style="text-align: left; border:none">Рассчетное отклонение:<strong><span tooltip="628" style="color: #009900;">-337 220 руб.</span></strong></td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Количество объявлений:<strong style="color: red;font-size: 10pt;" >78</strong></td>
			</tr>
			<tr style="border:none">
				<td style="text-align: left; border:none">Количество различных машин: <strong style="color: red;font-size: 10pt;" >22</strong></td>
			</tr>
		</table>
	</div>
</body>
</html>

LungDesire 09.01.2016 03:04

Подскажите пожалуйста, а не реально ли каждое из значений расположить в соответствующей переменной или элементе массива, что бы потом можно было их выводить на страницу в разном порядке?

Keramet 09.01.2016 11:44

Цитата:

Сообщение от LungDesire (Сообщение 403052)
Подскажите пожалуйста, а не реально ли каждое из значений расположить в соответствующей переменной или элементе массива, что бы потом можно было их выводить на страницу в разном порядке?

так values - это ж и есть массив (values[0], ... values[i], ...values[values.length]).

LungDesire 11.01.2016 06:25

Посмотрите пожалуйста код ниже. До 7-го элемента массива выборка правильная. А вот в 7-ой элемент попадает слишком много пунктов. Не удивительно, ведь всё просеивается через тег TD. По сути, из 7-го элемента необходимо получить цифру "5"(это количество объявлений), "2"(это количество различных машин:) и общую информацию об авто:
13.12.2015
16:18
http://auto.ru/cars/used/sale/1026661045-11f31b/
Audi A6 IV (C7),
2012,
31900 км,
1 380 000
-7
(auto.ru)

В варианте ниже просто теряются url адреса. По Вашему мнению, этого реально добиться?
Код:
<html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>IiT</title>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
$(function() {
var values = [], // массив искомых значений
txt;
$("td").each(function(n) {
txt = this.innerText;
values.push( txt.substring(txt.indexOf(':')+1).trim() );
});
document.write('1: ' + values[0]+' - OK<br><br>');
document.write('2: ' + values[1]+' - OK<br><br>');
document.write('3: ' + values[2]+' - OK<br><br>');
document.write('4: ' + values[3]+' - OK<br><br>');
document.write('5: ' + values[4]+' - OK<br><br>');
document.write('6: ' + values[5]+' - OK<br><br>');
document.write('7: ' + values[6]);
});
</script>
</head>

<body>
<span id="exists"></span><table class=sale-info cellspacing=4 width=100%
style="text-align: left; font-size:10pt; border:none; font-weight: normal; font-family: Tahoma;"><tr style="border:none"><td style="text-align:
left; border:none">Дата и время выхода: <strong>13.12.2015 16:18</strong></td></tr><tr style="border:none">
<td style="text-align: left; border:none">Город: <strong>Москва</strong></td></tr><tr style="border:none"><td style="text-align:
left; border:none">Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=119384272">
79263660***</a></td></tr></tr><tr style="border:none"><td style="text-align: left; border:none">Сотовый оператор: г. Москва и Московская
область</td></tr><tr style="border:none"><td style="text-align: left; border:none">Цена: <strong>1 380 000 руб.</strong>
</td></tr><tr style="border:none"><td style="text-align: left; border:none">Рассчетное отклонение: <strong>
<span tooltip="16" style="color: #009900;">-7 250 руб.</span></strong></td></tr><tr style="border:none"><td style="text-align: left;
border:none"><br />Количество объявлений: <strong style="color: red;font-size: 10pt;" >5</strong><br />
Количество различных машин: <strong style="color: red;font-size: 10pt;" >2</strong><br /><br />Марки машин:<br/><img align="left"
style="margin-right: 5px;" height="40" src="http://avtomir.ru/i/mark/AUDI.png"/><br clear="all"/><br/>Последние 15 объявлений:<br>
<b style="font-weight: bold;">13.12.2015 16:18: <a target=_blank href="http://auto.ru/cars/used/sale/1026661045-11f31b/">
Audi A6 IV (C7), 2012</a>, 31900 км, 1 380 000 <sup tooltip="16" style="color: #009900;"><small>-7</small></sup> (auto.ru)<br></b>
13.12.2015 16:09: <a target=_blank href="https://www.avito.ru/moskva/avtomobili/audi_a6_2012_696388594">Audi A6, 2012</a>,
35000 км, 1 380 000 <sup tooltip="16" style="color: #009900;"><small>-7</small></sup> (avito.ru)<br>16.05.2013 23:35:
<a target=_blank href="http://www.avito.ru/moskva/avtomobili_s_probegom/audi_q5_2008_168658149">Audi Q5, 2008</a>, 50000 км,
1 430 000 <sup tooltip="68" style="color: red;"><small>+369</small></sup> (avito.ru)<br>16.05.2013 23:27: <a target=_blank
href="http://cars.auto.ru/cars/used/sale/45400842-51ad2.html">Audi Q5, 2008</a>, 46000 км, 1 430 000 <sup tooltip=""
style="color: #009900;"><small></small></sup> (auto.ru)<br>28.04.2013 22:07: <a target=_blank
href="http://www.avito.ru/moskva/avtomobili_s_probegom/audi_q5_2008_162521001">Audi Q5, 2008</a>, 50000 км, 1 450 000
<sup tooltip="68" style="color: red;"><small>+389</small></sup> (avito.ru)<br></td></tr><tr style="border:none">
<td style="text-align: left; border:none"><br><strong>Данные:</strong><br/>отсутствуют</td></tr></table>
</body>
</html>

Keramet 11.01.2016 15:50

Ну только "в лоб" у меня получается, "а-ля" говнокод:
<html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>IiT</title>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
$(function() {
			var values = [],
				longVal,	//	содержание 7-го элемента
				txt;
			$("td").each(function(n) {
				if (n < 6) {
					txt = this.innerText;
					values.push( txt.substring(txt.indexOf(':')+1).trim() );
				} else if (n == 6) longVal = this;

			});
			values.push( longVal.childNodes[2].textContent );
			values.push( longVal.childNodes[5].textContent );
			values.push( longVal.childNodes[16].textContent );
			alert(values);	
		});
</script>
</head>

<body>
<span id="exists"></span><table class=sale-info cellspacing=4 width=100%
style="text-align: left; font-size:10pt; border:none; font-weight: normal; font-family: Tahoma;"><tr style="border:none"><td style="text-align:
left; border:none">Дата и время выхода: <strong>13.12.2015 16:18</strong></td></tr><tr style="border:none">
<td style="text-align: left; border:none">Город: <strong>Москва</strong></td></tr><tr style="border:none"><td style="text-align:
left; border:none">Телефон продавца: <a style="font-size: 14pt;" target=_blank href="http://avtomir.ru/a.aspx?control=20&offerid=119384272">
79263660***</a></td></tr></tr><tr style="border:none"><td style="text-align: left; border:none">Сотовый оператор: г. Москва и Московская 
область</td></tr><tr style="border:none"><td style="text-align: left; border:none">Цена: <strong>1 380 000 руб.</strong>
</td></tr><tr style="border:none"><td style="text-align: left; border:none">Рассчетное отклонение: <strong>
<span tooltip="16" style="color: #009900;">-7 250 руб.</span></strong></td></tr><tr style="border:none"><td style="text-align: left;
border:none"><br />Количество объявлений: <strong style="color: red;font-size: 10pt;" >5</strong><br />
Количество различных машин: <strong style="color: red;font-size: 10pt;" >2</strong><br /><br />Марки машин:<br/><img align="left"
style="margin-right: 5px;" height="40" src="http://avtomir.ru/i/mark/AUDI.png"/><br clear="all"/><br/>Последние 15 объявлений:<br>
<b style="font-weight: bold;">13.12.2015 16:18: <a target=_blank href="http://auto.ru/cars/used/sale/1026661045-11f31b/">
Audi A6 IV (C7), 2012</a>, 31900 км, 1 380 000 <sup tooltip="16" style="color: #009900;"><small>-7</small></sup> (auto.ru)<br></b>
13.12.2015 16:09: <a target=_blank href="https://www.avito.ru/moskva/avtomobili/audi_a6_2012_696388594">Audi A6, 2012</a>, 
35000 км, 1 380 000 <sup tooltip="16" style="color: #009900;"><small>-7</small></sup> (avito.ru)<br>16.05.2013 23:35: 
<a target=_blank href="http://www.avito.ru/moskva/avtomobili_s_probegom/audi_q5_2008_168658149">Audi Q5, 2008</a>, 50000 км, 
1 430 000 <sup tooltip="68" style="color: red;"><small>+369</small></sup> (avito.ru)<br>16.05.2013 23:27: <a target=_blank 
href="http://cars.auto.ru/cars/used/sale/45400842-51ad2.html">Audi Q5, 2008</a>, 46000 км, 1 430 000 <sup tooltip="" 
style="color: #009900;"><small></small></sup> (auto.ru)<br>28.04.2013 22:07: <a target=_blank 
href="http://www.avito.ru/moskva/avtomobili_s_probegom/audi_q5_2008_162521001">Audi Q5, 2008</a>, 50000 км, 1 450 000 
<sup tooltip="68" style="color: red;"><small>+389</small></sup> (avito.ru)<br></td></tr><tr style="border:none">
<td style="text-align: left; border:none"><br><strong>Данные:</strong><br/>отсутствуют</td></tr></table>
</body>
</html>

LungDesire 11.01.2016 17:59

Последний раз Вас тревожу: А как вывести информацию о остальных авто, а не только о первом:
Вроде:
13.12.2015 16:18: Audi A6 IV (C7), 2012, 31900 км, 1 380 000 -7 (auto.ru)
13.12.2015 16:09: Audi A6, 2012, 35000 км, 1 380 000 -7 (avito.ru)
16.05.2013 23:35: Audi Q5, 2008, 50000 км, 1 430 000 +369 (avito.ru)
16.05.2013 23:27: Audi Q5, 2008, 46000 км, 1 430 000 (auto.ru)
28.04.2013 22:07: Audi Q5, 2008, 50000 км, 1 450 000 +389 (avito.ru)

Keramet 11.01.2016 18:55

Очередная порция говнокода:
$(function() {
			var values = [],
				longVal,	//	содержание 7-го элемента
				txt;
			$("td").each(function(n) {
				if (n < 6) {
					txt = this.innerText;
					values.push( txt.substring(txt.indexOf(':')+1).trim() );
				} else if (n == 6) longVal = this;

			});
			values.push( longVal.childNodes[2].textContent );
			values.push( longVal.childNodes[5].textContent );
			values.push( longVal.childNodes[16].textContent );
			for (var i = 17, N = longVal.childNodes.length; i < N; i++)	{
				if (longVal.childNodes[i].nodeName == "#text")  values.push( longVal.childNodes[i].nodeValue );
				if (longVal.childNodes[i].nodeName == "A") values.push( longVal.childNodes[i].innerText );
			}
		//	console.log(longVal.childNodes);
			alert(values);
			
		});


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