За последние 24 часа нас посетили 17380 программистов и 1650 роботов. Сейчас ищут 888 программистов ...

Парсинг переменных тегов

Тема в разделе "JavaScript и AJAX", создана пользователем nixml, 14 апр 2013.

  1. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    есть строка вида:
    Код (Text):
    1. var string = " начало строки [tag=tagname1]text1[/tag]середина[tag=tagname2]text25text[/tag] конец"
    где tagname1 и tagname2 (ключи), а так же text1 и text2 (значения) - переменные
    чтобы точно было понятно что я хочу в результате, приведу код для наглядности, который вернет нужный мне результат
    Код (Text):
    1. result['tagname1'] = "text1";
    2. result['tagname2'] = "text25text";
    ну или так например
    Код (Text):
    1. result.tagname1 = "text1";
    2. result.tagname2 = "text25text";
    в дальнейшем я хочу использовать эти переменные для следующих условий:
    Код (Text):
    1. if(result['tagname1']!==NULL)
    2. {
    3.   alert(result['tagname1']);
    4. }
    5.  
    6. if(result['tagname2']!==NULL)
    7. {
    8.   alert(result['tagname2']);
    9. }
    10.  
    11. if(result['tagnameOTHER']!==NULL)
    12. {
    13.   alert(result['tagnameOTHER']);
    14. }
    заранее спасибо
    все что смог - это сделать так:
    Код (Text):
    1. var g = '[tag]1[/tag][tag]2[/tag]';
    2. var q = g.match(/\[tag\](\n|\r|.)*?\[\/tag\]/g);
    3. alert(q);
    дальше я могу вырезать из элементов полученного массива лишние теги
    но так я не знаю как их отличить друг от друга
    их может быть переменное количество
    а разные теги использовать не подходит
    возможно есть более грамотная альтернатива
    главное чтобы максимально коротко
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в массив забить? в чем сложность?
     
  3. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    я бы не поднимал тему, если бы мог сам это сделать.
    ладно, я видно форумом ошибся.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вопрос-то в чем?
     
  5. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    как распарсить строку и получить содержимое тегов, в зависимости от атрибутов самого тега?
    не знаю как еще написать

    важное примечание - строка может содержать символы переноса строки.
    Код (Text):
    1. var string = "
    2. начало строки
    3. [tag=tagname1]text1[/tag]
    4. середина
    5. [tag=tagname2]text25text[/tag]
    6.  конец
    7. ";
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    т.е. вы хотите чтобы вам дали готовую регулярку, которая решает поставленную задачу?
     
  7. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    а, вы просто местный флудер, так бы сразу и сказали чтоб я зря время не тратил... пойду лучше читать дальше учебник javascript, спасибо за помощь
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я думаю /smU поможет
     
  9. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    да вы что?
    а на
    invalid regular expression flag s
    invalid regular expression flag U

    просто не обращать внимание? :)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, точно, это ж не похапе.
    /s на то чтобы переводы строки канали в . и на нежадность придётся растыкать вопросиков по такому приниципу:

    .* - жадный
    .*? - нежадный.
     
  11. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    я решил. может кому еще будет полезно
    Код (Text):
    1. .match(/\[tag=([^\]]*)\]([\S\s])*?\[\/tag\]/g);
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а многострочность работает?
     
  13. nixml

    nixml Новичок

    С нами с:
    14 апр 2013
    Сообщения:
    7
    Симпатии:
    0
    конечно, вот же [\S\s]
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Зачем делать так:
    Код (PHP):
    1. if(result['tagname2']!==NULL) 
    Почему не определили переменную:
    window['result']=111;
    alert(result);
    window.result или var result?
    Как то оторвали, а саму задачу не написали...

    Что, на, что заменить нужно, в итоге, что должно получиться?
    Тут я сделал с функцией своей $.list
    Код (PHP):
    1. window['result']=[];
    2. result['tagname1']='textTagName1';
    3. result['tagname2']='textTagName2';
    4. $.list('tag1,tag2',result);
    5. var str='',type=function(variable,type) {
    6.     if('undefined'===typeof type) {
    7.         return 'undefined'!==typeof variable;
    8.     } else {
    9.         return type===typeof variable;
    10.     }
    11. };    
    12. tag1=type(tag1) && type(tag1,'string')?tag1:'';
    13. tag2=type(tag2) && type(tag1,'string')?tag2:'';
    14. if(tag1) {
    15.     str+=tag1;
    16. }
    17. if(tag2) {
    18.     str+=' - '+tag2;
    19. }
    20. alert(str); 

    Вам же нужно сделать так:

    Код (PHP):
    1. window['result']=[];
    2. result['tagname1']='textTagName1';
    3. result['tagname2']='textTagName2';
    4. var str='',type=function(variable,type) {
    5.     if('undefined'===typeof type) {
    6.         return 'undefined'!==typeof variable;
    7.     } else {
    8.         return type===typeof variable;
    9.     }
    10. },tag1=result['tagname1'],tag2=result['tagname2'];
    11. tag1=type(tag1) && type(tag1,'string')?tag1:'';
    12. tag2=type(tag2) && type(tag2,'string')?tag2:'';
    13. if(tag1) {
    14.     str+=tag1;
    15. }
    16. if(tag2) {
    17.     str+=' - '+tag2;
    18. }
    19. alert(str); 
    Объясните задачу подробнее...