Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2010, 16:07
Новичок на форуме
Отправить личное сообщение для timdenice Посмотреть профиль Найти все сообщения от timdenice
 
Регистрация: 10.02.2010
Сообщений: 4

Выделить целое слово на русском с помощью регулярного выражения!
Добрый день всем!
Два дня ломаю голову над проблемой - не могу написать правильно регулярку с выделением слова на русском или еще каком языке, кроме английского. например во фразе "Mister Mi drink a milk" выделяем только слово milk таким выражением /\b(milk)\b/ все работает на ура! Но если во фразе "Маленький Мук мал да удал" попробовать выделить слово мал таким способом /\b(мал)\b/ вхождений не находит. Смысл в том, чтобы в строке(анализ тектовых элементов DOM) заменять определенное слово, а не его словосочетания, на другое слово, и склеить строку обратно.
Я нашел один вариант, но он геморный, такая проверка дает результат: /(слово)/ в строке "словосочетание слово слова полуслово" разбиваем его сплитом в массив, дальше идет вторая проверка на наличие начальных букв у соседнего элемента справа и наличие конечных букв у соседнего элемента слева таким образом : /^\p{L}/ и /\p{L}$/ подключается библиотека юникода , если какой то из них верен, то операция с элементом не осуществляется. Вроде должно работать , но получается коряво очень, в firefox не работает в IE работает. Может у кого есть варианты получше чем этот ?
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2010, 16:12
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

"мал Маленький Мук мал да удал мал".replace(/(^|\s)мал(\s|$)/gi, '$1велик$2')
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2010, 16:13
Новичок на форуме
Отправить личное сообщение для timdenice Посмотреть профиль Найти все сообщения от timdenice
 
Регистрация: 10.02.2010
Сообщений: 4

это прикольно конечно, а как насчет знаков припинания ?
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2010, 16:16
Новичок на форуме
Отправить личное сообщение для timdenice Посмотреть профиль Найти все сообщения от timdenice
 
Регистрация: 10.02.2010
Сообщений: 4

и я не могу использовать replace, потому что слова я заменяю элемнтами DOM например как бы было со знаками препинания во фразе "мал ,мал Маленький Мук мал, да удал мал."
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2010, 16:20
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Посмотрите тут: http://forum.shelek.ru/index.php/topic,17836.0.html

UPD И еще здесь
Проблема имеет место быть, поскольку \b -- это граница между \W и \w, а в \w входят A-Z, a-z, 0-9, и _. Ищите по классу, который будет содержать еще и русские буквы.

Последний раз редактировалось e1f, 10.02.2010 в 16:47.
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2010, 20:30
Новичок на форуме
Отправить личное сообщение для timdenice Посмотреть профиль Найти все сообщения от timdenice
 
Регистрация: 10.02.2010
Сообщений: 4

ничего не нашел ( вроде должен работать вариант двойной проверки с применением класса XRegExp но скрипт че то гонит, как то неправильно работает (((
Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2010, 11:59
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

"Мал Маленький Мук, мал, да удал, хоть и мал. Мало-мал.".replace(/(^|[^_0-9a-zA-Zа-яёА-ЯЁ])мал([^_0-9a-zA-Zа-яёА-ЯЁ]|$)/gi, '$1пыщ!$2')
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск