Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выделить целое слово на русском с помощью регулярного выражения! (https://javascript.ru/forum/misc/7613-vydelit-celoe-slovo-na-russkom-s-pomoshhyu-regulyarnogo-vyrazheniya.html)

timdenice 10.02.2010 17:07

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

e1f 10.02.2010 17:12

"мал Маленький Мук мал да удал мал".replace(/(^|\s)мал(\s|$)/gi, '$1велик$2')

timdenice 10.02.2010 17:13

это прикольно конечно, а как насчет знаков припинания ?

timdenice 10.02.2010 17:16

и я не могу использовать replace, потому что слова я заменяю элемнтами DOM например как бы было со знаками препинания во фразе "мал ,мал Маленький Мук мал, да удал мал."

e1f 10.02.2010 17:20

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

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

timdenice 10.02.2010 21:30

ничего не нашел ( вроде должен работать вариант двойной проверки с применением класса XRegExp но скрипт че то гонит, как то неправильно работает (((

e1f 11.02.2010 12:59

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


Часовой пояс GMT +3, время: 13:47.