Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: JavaScript регулярные выражения - спецсимвол \b  (Прочитано 28111 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« : 25-01-2009 20:57 » 

Привествую!

Пришел вот в очередной раз с такой проблемой.
Нужно мне при помощи регулярного выражения найти слово.
Было решено использовать спецсимвол \b как символ "границы слова". Однако ничего не выходит, почему-то реагирование на этот символ не происходит( Вот пример самого банального кода

Код:
var title_reg = /\bап\b/g;
var str = "проверка ап проверка";
alert(str.replace(title_reg, "!!!"));

Может быть кто-нибдуь сталкивался с таким? Если \b нельзя использовать, как тогда обозначить границы слова?
Заранее спасибо!
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-01-2009 21:10 » 

У меня этот пример нормально работает с англоязычными строками. А с твоими строками - не заменяет. Наверное, какие-то проблемы с определением границ в кириллице?
Записан
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 25-01-2009 22:37 » 

Да, возможно так. Тогда напрашивается что-то вроде
Код:
/(^| )text($| )/g;
но мне затем это нужно заменить, получается менять на " text2 " с пробелами, а затем удалить проблеы в конце и начале строки если они присутствуют.
Но не уверен что это самый правильный путь...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 26-01-2009 04:57 » 

Если так?
/([-_0-9a-zA-Zа-яёА-ЯЁ]+)/
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 26-01-2009 06:26 » 

Я в регулярных выражениях не силен. Это вроде будет находить первое слово в строке?
Мне просто нужно во всем тексте найти заданное слово, и заменить его.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 26-01-2009 06:35 » 

/\bап\b/g

*

/([-_0-9a-zA-Zа-яёА-ЯЁ]+)/

=

/([-_0-9a-zA-Zа-яёА-ЯЁ]+)/g

Ok?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 26-01-2009 15:43 » 

Не, не ок( не понимать моя(
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 26-01-2009 15:53 » 

Речь о том, чтобы определить слово как набор символов, указанный RXL:
[-_0-9a-zA-Zа-яёА-ЯЁ] - возможные символы в слове,
/([-_0-9a-zA-Zа-яёА-ЯЁ]+)/ - шаблон для самого слова.

Похоже, проще никак Улыбаюсь
Записан
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 26-01-2009 16:33 » 

Т.е. проврять на соотвествие двум регулярным выражениям? Сначала самому слову, а затем уже является ли это слово действительно отделным словом? Улыбаюсь
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 26-01-2009 17:40 » 

Хм. Кстати, да: если нужно искать и заменять именно нужное слово, записанное кириллицей, то, наверное, получится что-то громоздкое. Меня хватило только на такое:
Код: (Javascript)
var title_reg = /([^-_0-9a-zA-Zа-яёА-ЯЁ])ап([^-_0-9a-zA-Zа-яёА-ЯЁ])/g ;
var str = "проверка ап проверка";
alert(str.replace(title_reg, "$1"+"!!!"+"$2"));
и это не работает для "ап проверка". Может, кто лучше вариант знает Улыбаюсь Наверное, лучше и правда заменять в 2 этапа.
« Последнее редактирование: 26-01-2009 17:48 от Вад » Записан
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 26-01-2009 18:53 » 

А нет ли в модификаторах регулярного выражения какого-то, определяющего "многобайтные строки"?
g - global, т.е. все найденные, m - multiline, i - register independent; а есть ли что-то, чтоб рабоать с национальными кодировками в unicode или utf-8? Где-то такое встречал, но возможно это был не javascript....
Записан
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 26-01-2009 20:09 » 

Kivals, ну вот уж даже незнаю. Насколько знаю только 3 вышеперечисленных флага есть...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 27-01-2009 05:50 » 

Kivals, это поддерживается на уровне библиотеки и локали. В случае JS это не нужно вообще, т.к. все исходные js-тексты и прочие данные приводятся браузером к одной внутренней кодировке.

Razor, давай так: точно опиши задачу.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 27-01-2009 07:20 » 

Вот, если совсем точно, то:
Дан определенный текст, дано определенное солво (ну или массив слов, разницы существенной нету). Скрипт должен находить данное слово во всем тексте и обрамлять его определенными тегами (разные, в зависимости от выбора, но это тоже думаю не суть).
Тут, я так полагаю нужно решить следующие этапы:
1. Чтобы слово, было действительно словом, а не часть другого слова.
2. Чтобы учитывалось, что после слова может стоять, например, запятая или [ !:;,.] (это уже более сложнее), ибо обрамлять тегами нужно слово без знака припенания.

--------------------------
Пример:
Слово - друг
Текст -
Привет, мой друг! Друг хороший.

на выходе

Привет, мой <span>друг</span>! <span>Друг</span> хороший.

--------------------------

Вчера до поздна думал, думал над этим делом. Единственное решение которое пока пришло:
Разбивать текст на массив (разделителем явлвяется пробел), а потом каждое слово проверять на соотвествие регулярному выражению
\слов
Записан
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 27-01-2009 10:51 » 

данное слово известно в момент поиска?
заменяй именно данное слово на такой же текст, обрамленный тегами.
Только не забудь перед этим в самом слове экранировать значущие символы (*?.[]{}^/\ и пр.)
New RegExp(str, modifiers) - это из JavaScript? где: str=prepare(данное слово);
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 27-01-2009 12:57 » 

Razor, тебе не нужно искать ни сосендние слова, ни знаки препинания - нужно только выделить слово целиком и сделать замену. Вроде регулярное выражение, что ты составил в начала темы, подходит - вечером проверю, что к чему.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 27-01-2009 13:40 » 

RXL, да, подходит оно чтобы выделить слово. а вот если за словом стоит запятая, то уже не подходит. ) а если запятую учитвать в регулярном выражении она "вырежится" вместе со словом )
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 27-01-2009 18:03 » 

В общем, в понятие "алфавитно-цифровой символ" входят только ASCII, по этому приходится извращаться с наборными классами символов.

Код: (Javascript)
var str = 'Слово в строке. Тестовая строка в которой нужно выделить Слово, которое может быть любым. Не словоСочетание, а именно слово. И замыкающее слово';
var re = /(^|[^а-яё])(слово)([^а-яё]|$)/ig;

str = str.replace(re, '$1<b>$2</b>$3');
document.write(str);
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 27-01-2009 19:08 » 

RXL, Вот я тупелло))) я просто толькочто понял зачем символы $1 и т.д. )
Действительно все просто)
Спасибо большое)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines