|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
RegExp банально, нужно разрешить пробел между символами
Я что-то уже туплю. Написал за свою практику кучу регулярок, а тут тормознулся на такой мелочи
В общем, нужно распарсить html страницу, на которой есть списки со ссылками. Так вот, есть ссылки вида <li><a href="/something/somethingelse/">Что-то</a> Таких ссылок в коде страницы дофига, и все они ведут в подменю сайта. Нужно в мобильном приложении собрать это же меню с такой же структурой. Загвоздка в том, что ссылки не всегда написаны именно так. Иногда там есть пробелы, любезно забытые разработчиком в php коде) Собственно, ссылка иногда выглядит вот так: <li > <a href="/something/somethingelse/"> Пишу регулярку с look ahead и look behind var regExp:RegExp = /(?<=\<li><a href=\"\/)(.*?)(?=\<\/a><\/li>)/g; var result:Array = pageText.match(regExp); А вот такая регулярка, находит второй вид Видимо я действительно дико туплю и нужно пойти отдохнуть, но не могу придумать как в лук ахэд мне воткнуть любое количество пробелов Такой вариант, не работает. Не работает так же если этот символ пробела обернуть в символьный класс или в диапазон п.с. Доступа к исходному коду сайта нет
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Lorem ipsum
|
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
var re:RegExp = /<li\s*>\s*<a\s*href="(.+?)"/gim; var input:String = '' + '<li><a href="/something/somethingelse/">Что-то</a>' + '<li > <a href="/something/somethingelse2/">Что-то</a>' + ' \r\n <li \n > \r\n <a href="/something/somethingelse3/">Что-то</a>'; var matches:Array = []; while (true) { var match:Array = re.exec(input); if (match) { matches.push(match); } else { break; } } var links:Array = matches.map(function(match:Array, index:int, arr:Array):String { return match[1]; }); trace(links.join("\n"));
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Цитата:
i.o., вывод правильный, но как-то уж слишком мудрено. Есть вариант проще, сначала выполнить простую регулярку по сносу всех пробелов в тегах, а потом уже выполнить лукахэд и лукбехайнд. Что, я собственно и сделал. Интересно почему не работает \s* в этих луках. Вот так работает. Но если часть регулярки из replace перенести в lookahead, а replace убрать, работать перестанет. Похоже на баг.
__________________
Ко мне можно и нужно обращаться на ты) Последний раз редактировалось caseyryan; 23.11.2016 в 06:09. |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Вот как раз с просмотром назад и вперед мудрено.
В твоей задаче нужно заматчить с группами все вхождения и потом по первой группе получить результат. С просмотрами назад получится в любом случае тормозная регулярка (это на будущее), хотя задачу выполняет абсолютно такую же. Можно упростить до такого варианта Например в PHP есть preg_match_all(), может и в AS3 тоже есть что-то подобное...
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Lorem ipsum
|
В этом примере я просто избавился от lookbehind, чтобы поиск строки заработал. Остальное — вопрос одного движения, которое показал i.o. и его регулярка отлично работает, не мудри =)
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
Цитата:
В любом случае, спасибо за подсказку)
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Lorem ipsum
|
Ясно. Просто я думал, что какая-то заковыка именно в этом способе. А найденные онлайн-тулзы для теста регулярок на lookbehind ругаются, бо работают на JavaScript.
__________________
Поймай яблоко 2! |
|
|||||
На сколько я знаю и в as3 до недавнего времени с ними были проблемы. Не работал или lookbehind или lookahead, точно не помню. А теперь работают оба, но, как выяснилиось, тоже не без багов)
__________________
Ко мне можно и нужно обращаться на ты) |
Часовой пояс GMT +4, время: 14:40. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|