Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли метод поиска по тегам в []? а не <> 
V
    Опции темы
nule
Дата 3.11.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Приветствую!
Задача выловить из страницы форума текст, находящийся под спойлером. Текст заключен в "форумный" тег  [spoler][/spoler]. 
getElementsByTagName работает только с html-тегами в <>, а как быть с тегами в []? Есть ли готовые решения?
Спасибо!
PM MAIL   Вверх
$дмитрий
Дата 3.11.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 5
Всего: 45



Примерно так
Код

var text = 'text [spoler]inner text[/spoler] txt';
var result = text.match(/\[spoler\](.+?)\[/spoler\]/g);


PM MAIL   Вверх
Egik2
Дата 3.11.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: 1
Всего: 11



Ты точно уверен, что произвольный тег не ищется?
Метод getElementsByTagName работает с DOM моделью документа и с HTML имеет слабую связь


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
nule
Дата 3.11.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Цитата(Egik2 @ 3.11.2011,  15:03)
Ты точно уверен, что произвольный тег не ищется?
Метод getElementsByTagName работает с DOM моделью документа и с HTML имеет слабую связь

Не ищется. Это же даже не тег, а BB-код.
Насчет варианта $дмитрий, разбираюсь. Пока ничего не понятно.
PM MAIL   Вверх
Egik2
Дата 3.11.2011, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: 1
Всего: 11



Ааа, понятно. Тогда не будет работать. 
В дополнение к совету $дмитрия советую почитать Регулярные выражения в Java


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
nule
Дата 3.11.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Цитата(Egik2 @ 3.11.2011,  15:44)
Ааа, понятно. Тогда не будет работать. 
В дополнение к совету $дмитрия советую почитать Регулярные выражения в Java

Спасибо. В целом разобрался, но запутался в слэшах.  
Код

var text = 'text [sp]inner text[sp] txt';
var x = text.match(/[sp](.+?)[sp]/g);

Такой код даёт результат 
Код

sp]inner text[s

Как убрать артефакты по краям, никак не соображу. В примере $дмитрий видимо со слэшами тоже не всё в порядке, т.к. именно в таком виде пустой.
PM MAIL   Вверх
Evghenusi
Дата 3.11.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 3
Всего: 15



Цитата(nule @  3.11.2011,  16:57 Найти цитируемый пост)
В примере $дмитрий видимо со слэшами тоже не всё в порядке
угу, не за экранирован слэш.
Код
var result = text.match(/\[spoler\](.+?)\[\/spoler\]/g);


Цитата(nule @  3.11.2011,  16:57 Найти цитируемый пост)
Как убрать артефакты по краям, никак не соображу.

Код
var result = text.match(/(?<=\[spoler\])(.+?)(?=\[\/spoler\])/g);
 ?
PM WWW   Вверх
nule
Дата 3.11.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Цитата(Evghenusi @ 3.11.2011,  17:56)
?

Увы. Результат - пустая строка smile 
PM MAIL   Вверх
Evghenusi
Дата 3.11.2011, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 3
Всего: 15



Цитата(nule @  3.11.2011,  18:24 Найти цитируемый пост)
Результат - пустая строка

результат ошибка. почему-то JS против назад смотрящего утверждения (?<=), хз как исправить.

предлагаю перейти на Perl или PHP там таких ошибок нет  smile (не воспринимайте всерьёз)

Это сообщение отредактировал(а) Evghenusi - 3.11.2011, 18:45
PM WWW   Вверх
nule
Дата 4.11.2011, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Код

11.1.7. Средства регулярных выражений Perl, не поддерживаемые в JavaScript
Мы говорили, что ECMAScript v3 определяет относительно полное подмножество средств регулярных выражений из Perl 5. Развитые средства Perl, не поддерживаемые ECMAScript, включают следующее:
• флаги s (однострочный режим) и x (расширенный синтаксис);
• управляющие последовательности \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z и \G;
• (?<= – положительное условие на предыдущие символы и отрицатель
ное условие на предыдущие символы;
• комментарий (?# и прочий расширенный синтаксис (?.

Дэвид Флэнаган, JS подробное руководство, 5 издание.

 smile 
PM MAIL   Вверх
Egik2
Дата 4.11.2011, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: 1
Всего: 11



Немного модифицированный вариант

Код

var text = 'text [spoler]inner text[/spoler] txt';

var regexp = /\[spoler\](.+?)\[\/spoler\]/g;

var res = regexp.exec(text)


Результат в переменной res будет массив

["[spoler]inner text[/spoler]", "inner text"]

Таким образом res[1] будет содержать искомое содержимое тега.
Метод exec возвращает массив совпадающих значений и Вы сможете таким образом обработать все теги на странице


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
$дмитрий
Дата 4.11.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 5
Всего: 45



Все находит
Код

var text = 'text [sp]inner text1[/sp] txt [sp]inner text2[/sp]';
var x = text.match(/\[sp\](.+?)\[\/sp\]/g);

alert(x[0]);
alert(x[1]);

PM MAIL   Вверх
nule
Дата 4.11.2011, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Цитата

Обратите внимание: exec() всегда включает полную информацию для найденного со 
ответствия в возвращаемый им массив независимо от того, является  regexp глобаль 
ным   шаблоном   или   нет.   Этим  exec()  отличается   от   метода  String.match(),   который 
возвращает намного меньше информации при работе с глобальными шаблонами. Вы 
зов exec() в цикле – единственный способ получить полную информацию о результа 
тах поиска для глобального шаблона. 

Дэвид Флэнаган, JS подробное руководство, 5 издание.

Для примера выше разницы между match и exec никакой, как я понял.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1305 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.