Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Распарсить строку с помощью регулярного выражения (https://javascript.ru/forum/misc/39703-rasparsit-stroku-s-pomoshhyu-regulyarnogo-vyrazheniya.html)

volodymyrl 08.07.2013 20:10

Распарсить строку с помощью регулярного выражения
 
Есть контент на странице, например такой

<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>


нужно найти в нем блок который начинается на
{^youtubevideo
и заканчивается на ^} А то что в середине передать в массив. Обработать и заменить изначально найденный блок на новый

на выходе должно получиться что-то типа

<div class="engage-eventCallout">
<object width="425" height="264">
<param name="movie" value="http://www.youtube.com/v/3OieT8W-9Rs&amp;fs=1&amp;enablejsapi=1&amp;color1=0x666666&amp;color2=0xEFEFEF">
<param name="allowFullScreen" value="true">
<param name="allowscriptaccess" value="always">
<param name="wmode" value="transparent">
<embed src="http://www.youtube.com/v/3OieT8W-9Rs&amp;fs=1&amp;enablejsapi=1&amp;color1=0x666666&amp;color2=0xEFEFEF" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" allowfullscreen="true" width="425" height="264">
December 16, 2011 Seattle WA</p></div>


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

bes 08.07.2013 20:19

я теперь аккуратненько вставь пропущенные буквы

volodymyrl 08.07.2013 20:28

Цитата:

Сообщение от bes (Сообщение 261134)
я теперь аккуратненько вставь пропущенные буквы

готово

bes 08.07.2013 20:32

оно?
var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
alert(str.match(/\^youtube.*\^}/)[0])

volodymyrl 08.07.2013 20:54

Цитата:

Сообщение от bes (Сообщение 261144)
оно?
var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
alert(str.match(/\^youtube.*\^}/)[0])

спасибо, уже близко. Но нужно как-то разбить на составляющие, типа with=425, height=264....

bes 08.07.2013 21:00

не понял что и как ты хочешь вычленить, но для запоминания используются круглые скобки
var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
var reg = /(.*\^youtube).*(\^}.*)/;
str = str.match(reg)[0];
alert(str.replace(reg, "$1 MY_BLOCK $2"));

volodymyrl 08.07.2013 21:10

Цитата:

Сообщение от bes (Сообщение 261162)
не понял что и как ты хочешь вычленить, но для запоминания используются круглые скобки
var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
var reg = /(.*\^youtube).*(\^}.*)/;
str = str.match(reg)[0];
alert(str.replace(reg, "$1 MY_BLOCK $2"));

мне нужно получить все параметры видео из этой строки {^youtubevideo|(width)425|(height)264 ..... ^}

bes 08.07.2013 21:36

ну и вычленяй потихоньку, специальные символы экранируй
как-нибудь типа так
var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
var reg = /.*\^youtube.*\(width\)(\d*)\|.*\^}.*/;
alert("width=" + str.replace(reg, "$1"));

vadim5june 08.07.2013 22:57

var str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>';
str=str.match(/\^youtube.*\^}/)[0];
var els=str.split('|');
for(var i=1;i<els.length;i++)
{var el=els[i];
var l=el.split('(')[1].split(')')[0];
var r=el.split(')')[1];
alert(l+'="'+r+'"');
};

Deff 08.07.2013 23:27

str = '<div class="engage-eventCallout">{^youtubevideo|(width)425|(height)264|(rel)True|(color1)#666666|(url)http://www.youtube.com/watch?v=ZqUFLFmuLmg|(autoplay)False|(border)False|(loop)False|(cookies)False|(hd)False|(fs)True|(color2)#EFEFEF^}December 16, 2011 Seattle WA</p></div>'
if(/\^youtubevideo/gim.test(str)){
  var arr=str.split(/\^youtubevideo\|\(|\^\}/igm)[1].replace(/\)/gim,':"').split("|\(");
  eval('var obj = {' + arr.join('",\n') + '"}');

  for (i in obj){
     alert(i+':'+obj[i])
  }
}


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