Tuesday, November 04, 2014

Javascript и русский язык дружат. Но не до конца.

Вот ведь как оказывается!

Промучался полдня пытаясь понять, почему не работает regexp, который окружает каждое слово тегами. Вот такой:

text = (dict[k]).replace(/\b(\w+)\b/g, "$1");    

А оказывается он работает, но только с латиницей (ASCII mode), флаг поддержки юникода (u) не поддерживается. Только на одном ресурсе встретил упоминание про подобное поведение регулярных выражений в Javascript. Как решение предлагалось использовать диапазон символов ([a-zа-я0-9])+ вместо (\w+). Впрочем мне это тоже не помогло, ибо не также не работало.

Рабочим решением стало разбивание строки по возможным разделителям

text ="" + dict[k].replace(/([ ;,\.]+)/gm, "$1") + "";   

PS: Этот код потребовался для получения слова, по которому кликнул (тапнул) пользователь.  Может немного кривовато, есть решение, где можно получить слово в обработчике клика (тапа) через window.getSelection(), но неожиданно не встретил готового кроссплатформенного решения, который сразу бы заработал на мобильных платформах.

Возможно вернусь к этой идее позднее.


No comments: