![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Innuendo |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
есть регулярное выражение:
/fo*/gi 1) надо узнать сколько в строке будет совпадений. По справочнику я посмотрел что такое сделает функция exec, которая выдаст массив с совпадениями
Что я неверно делаю? 2) Надо обвести все куски текста подходящие регу символами "#"
как осуществить такое? -------------------- =) |
||||
|
|||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
1. exec ищет только одну подстроку. А в массиве хранятся общее совпадение + подшаблоны, которых у тебя нет.
Используй match Добавлено @ 20:56 2. Можно так:
но, по-моему, был менее извратный способ. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
1) exec не ищет все совпадения, флаг g просто позволяет тебе искать дальше, достань в цикле все совпадения.
2)
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
а можешь объяснить эту конструкицю?
s = s.replace (reg, (function(x){return '#' + x+'#'})); не очень понимаю как оно работает =) -------------------- =) |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
странно, я в справочнике понял что все. тогда зачем результат выдавать в массиве? =) -------------------- =) |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Там подстроки захваченные скобками (), 0 это весь рег, 1 первая скобка и т.д. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
А вот проблема с регам...
Не получается составить рег.. намудрил так. Нужно отлавливать телефоны, аси, и т.д. Т.е. цифра с тире или без тире. Но мне не надо чтоб отлавливало в строках типа:
т.е. за цифрами должно идти или тире, или пробел тире, но не просто пробел, и не переход на другую строку. Чё-то не получается составить такой рег -------------------- =) |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
||||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
JSman, во первых тире в классе символов нужно экранировать, во вторых лучше так:
Лень было перечислять пробелы, потому \s, так что
будет найдено регом. Замени \s на [ \t] если только пробел/таб. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Спасибо, но и он просто "45" без ничего отлавливает =) а мне такое не надо
-------------------- =) |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Тогда так: [0-9]+(?:\s*-\s*[0-9]+)+
Но учти что не все асю пишут чере тире -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Я понимаю =)
Мне нужно отловить номера телефонов, аськи и т.д. Конечно можно писать и транслитом дословно, тогда это не поможет. Но так как в асе от 6 до 9 чисел, то её пишут или слитно или по 2, по 3 через тире. Вот мне и надо, если идёт 2-3 цифры, то дальше должно идти или опять цифры или тире (с пробелами), или просто пробелы (но за пробелами опять цифры). Вообще комбинации цифр (через тире, через пробел, через пробел-тире) исключаю просто число 2-ух и 3-ёх значное (т.е. за ним не идёт пробелов или тире и опять цифр. За ним уже или конец строки или простой текст пошел) Я вообще с регами недавно знаком. По справочнику их составляю. Вот как понять что вы за скобкой сразу ставите "?"- это т.е. вся скобка будет необязательная? и вообще такой знак (типа ?, +, *) действует только к первому предыдущему? и если надо ко многим, то мы их обводим в скобки? -------------------- =) |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Проще схавать моим первым регом, затем втроой строчкой исключить что ты не хочешь. Писать единый рег,различающий:
+ 1-234 - 234 + 2345 + 234 -32 //где + это совпадение, - нет. Есть гиморное занятие.
Да.
Это квантификатор, да. Лучше не захватывающая группа (?: ), да. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Ок, спасибо за инструкции.
Я щас огорчен чутос: Это я писал прогу маленькую (xul расширение), которое на определенном сайте ищет в нужных элементах (<td> с определенными классами) регулярные выражение - номера телефонов, асек, емэйлы, адреса в инете и матерные слова - и сообственно подсвечивает их (чтоб бросалось в глаза - упрощение работы модерирования). Ну уже всё работает, только вот видно из-за перебора 40-60 этих <td> на одной странице, и куча replace'ов (c каждым регом) происходит мелкое торможение страницы. Функция весит при загрузке - загружается полностью страница, потом секунду в ступоре и всё нормально =) Вот эта секунда и нервирует =) Блин, как сделать чтоб не тормозило. Можно ли как-то сначала проверять на index.Of() и только если то реплейсить? хотя наверное если реплейс обращается к строке а там нету того, что ему надо заменить, то он сильно ресурсов не скушал +) -------------------- =) |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Выкладывай код как ты текст парсишь/replace вызываешь. Секунду не может тормозить, ну только если страница просто огромна. Хотя в современной лисе даже на кратеньком .txt можно 230MB памяти схавать и затормозить... млин
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Код в студию:
Да, не удивляйтесь, там регулярные выражения - маски матерных слов =) Так как для написания в Мозилле нельзя в исходнике использовать кириллицу, я писал в Уникоде, и переводил в кирриллицу (это уже работает, так как она хранится в переменной, а не ведена мной вручную в исходнике)
В уникоде перед двоеточием я специально поставил пробелы, чтоб они тут не преобразовались в символы =) Это сообщение отредактировал(а) Innuendo - 25.8.2006, 19:24 -------------------- =) |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
так мне и не помогут? =)
-------------------- =) |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |