Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Поиск и удаление <br> из строки (http://www.flasher.ru/forum/showthread.php?t=166496)

VitaliyKrivtsov 03.09.2011 17:12

Поиск и удаление <br> из строки
 
С помощью регулярки находил только первое совпадение и заменял на пробел, но остальные не получается даже заменить. Как удалить все <br>?

derhab 03.09.2011 17:16

в регулярке флаг поставить надо соответствующий g

VitaliyKrivtsov 03.09.2011 18:03

derhab, да теперь все удаляются. А как-нить удалить <br> без замены возможно? Лишний пробел не нужен.

derhab 03.09.2011 18:16

а зачем вы заменяете на пробел?, заменяйте на "".

VitaliyKrivtsov 03.09.2011 22:14

Цитата:

а зачем вы заменяете на пробел?, заменяйте на "".
Не знаю откуда взял, но думал что замена на "" является заменой на пробел :)

windrunner31 03.09.2011 23:51

А можете привести пример как вы это делаете?

ProxyGreen 04.09.2011 00:20

Код AS3:

str=str.replace(/<[^>]+>/g, "");


windrunner31 04.09.2011 09:38

а как эта штука вообще работает?Где тут указано,что именно <br> надо менять?

VitaliyKrivtsov 04.09.2011 09:46

Цитата:

а как эта штука вообще работает?Где тут указано,что именно <br> надо менять?
Эта штука будет косить все теги подряд.

Мой вариант:
Код AS3:

string = string.replace( /[<\/br>|<br>]/g, " ");


windrunner31 04.09.2011 12:37

можете,пожайлуста,рассказать,что у вас в запросе что означает?
И еще вопрос,вот есть у меня к примеру
<br>dfngjnsdkgj</br> можно ли сделать <h>dfngjnsdkgj</h> и как?

КорДум 04.09.2011 13:07

Прочитайте любую книжку по регулярным выражениям.

VitaliyKrivtsov 04.09.2011 15:49

Цитата:

можете,пожайлуста,рассказать,что у вас в запросе что означает?
И еще вопрос,вот есть у меня к примеру
<br>dfngjnsdkgj</br> можно ли сделать <h>dfngjnsdkgj</h> и как?
Вот, теперь все </br> и <br> будет заменять на <h>:
Код AS3:

string.replace( /(<\/br>|<br>)/g, "<h>") );

Добавлено через 5 минут
На счет "можете,пожайлуста,рассказать,что у вас в запросе что означает", даже если я расскажу что значит это регулярное выражение - научится составлять самим рег. выражения будет сразу же трудно. И здесь солидарен с КорДум"ом. Я читал Регулярные выражения, 3-е издание (Д. Фридл).

derhab 04.09.2011 17:03

Цитата:

Сообщение от VitaliyKrivtsov (Сообщение 1028084)
Мой вариант:
Код AS3:

string = string.replace( /[<\/br>|<br>]/g, " ");


у вас по прежнему заменяется на пробел, так надо?

VitaliyKrivtsov 04.09.2011 22:44

derhab, заменил на выражение:
Код AS3:

string = string.replace( /(<\/br>|<br>)/g, "");

Теперь все ок :)

ProxyGreen 04.09.2011 23:11

Тогда уж так:
Код AS3:

str = str.replace( /<\/?br(?: *\/)?>/g, "");

иначе такой: <br /> не найдёт.

Mideon 05.09.2011 11:19

Если что то надо заменить во всем тексте есть метод
Код AS3:

 StringUtil.replace();

в утилите
Код AS3:

com.adobe.utils.StringUtil;


wvxvw 05.09.2011 13:15

По поводу взять книжку по регулярным выражениям - было неплохое замечание...
Несколько вещей:
То, что находится внутри [] (квадратных скобок) - это character class, там не важен порядок / последовательность, поэтому символы которые в других случаях влияют на порядок выполнения, тут не применимы, равно как и квантификаторы, зато у некоторых других символов появляются новые значения.
Это значит, что в выражении /[<\/br>|<br>]/g одна `b' и одна `r' - лишние, а `|' - не нужна.
Далее, обычные захватывающие группы в ECMAScript регулярных выражениях не нужно начинать с `?:' - это избыточно. Это значит, что (?: *\/) лучше было бы записать ( *\/).
Далее, еслу уж мы собираемся искать все "валидные" <br> теги, то, вы не поверите, но у этих тегов
1. разрешены аттрибуты. Например, вы можете указать стиль или класс... вот тако-то...
2. по спецификации пробельными элементами считаются пробел, символ табуляции, перевод строки, возврат каретки.
Поэтому, если уж иксать с помощью регулярных выражений, то:
/<\/?br[^>]*>/gmi
Не забывайте, что HTML не чуствителен к регистру. Но лучше - не заниматься ерундой, и использовать XML, если возможно, и просто удалить все узлы с именем /br/i потому что выражение приведенное выше будет удалять и в комментариях и в CData, а это может быть нежелательно.

ProxyGreen 05.09.2011 18:56

Хе хе что это вдруг не сохраняющие скобки, "(?: )" избыточными стали?

Судя по вашему выражению ниже годный такой тег <br> :D
<<<<BRAT moy Vasia>>>

windrunner31 05.09.2011 22:08

кстати да,а как избежать такой ошибки тогда?

Rzer 05.09.2011 22:16

через split("<br>").join(""); работает быстрее

VitaliyKrivtsov 06.09.2011 01:55

wvxvw, рег. выражения - это хрень, которая выносит мне мозг напрочь. Поэтому я написал такой простой способ удаления <br>. И удалял я их не из HTML. Достаточно такого решения. За замечания спасибо. Далее буду совершенствовать свои знания в этой области, но сейчас времени нет.

И скорей всего ProxyGreen прав. Выражение <<<<BRAT moy Vasia>>> регулярка вполне примет за <br>.

windrunner31 06.09.2011 08:22

Rzer,ваш способ и понятнее)

wvxvw 06.09.2011 14:10

Цитата:

Сообщение от ProxyGreen (Сообщение 1028426)
Хе хе что это вдруг не сохраняющие скобки, "(?: )" избыточными стали?

Судя по вашему выражению ниже годный такой тег <br> :D
<<<<BRAT moy Vasia>>>

Да, я погарячился на счет того, что это одно и то же. Сейчас проверил, действительно работает. Но все равно, с ключем global это как бы безразлично.
А выражение рассчитано на то, чтобы убрать все <br>, то, что оно не уберет лишнее - я не говорил (более того, сказал, что уберет лишнее). И еще, сказал, что нужно не заниматься ерундой, а использовать правильный инструмент. Регулярные выражения в этом случае - это заниматься ерундой.

EDIT:
Потому, что если уж сильно хочется быть точным, то можно, например, придумать что-то такое:
Код:

/<(?:br[\s\r\n]+(?:[a-z$][\w$.:-]*[\s\r\n]*=[\s\r\n]*("|').*\1[\s\r\n]*)*)|\/br[\s\r\n]*)>/gim
Но это все равно не рассматривает, например, ситуации, когда у нас не валидный XML / HTML, и, например, есть закрывающая `>' внутри аттрибута. Ну и производительность такого выражения будет в очень много раз хуже, чем сконвертировать в XML и найти все нужные узлы.
Да, я даже не проверял выражение, я не думаю, что человек в здравом уме захочет это использовать.

dimarik 06.09.2011 15:25

Чем же сконвертить html в xml?


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.