S.Tominoff

Fullstack JavaScript разработчик

Граница слова (\b) и кириллица в JavaScript

Попытка решения проблемы поддержки кириллицы в регулярных выражениях JavaScript

С этой проблемой я столкнулся при разработке системы приема частных объявлений. Проблема в том что \b или граница слова, отлично работает только с латинницей, однако встретив кириллицу, модификатор не срабатывает. Здесь я выложил небольшой пример проблемы.

 

Кстати говоря, кириллица также не видна для модификатора \w и это тоже иногда может порождать некоторые проблемы:

 

Вот и получается, что даже для такой, казалось бы, тривиальной задачи нужно писать костыли:(

 

 

Вот мой костыль:

var rx = ([\u0400-\u04FF]|\w)+(?=\s|\b|\W|$)
А вот что из этого получается:

 

В PHP, кстати говоря, такой проблемы замечено не было - там регулярки сразу работают с UNICODE строками и, к примеру, вот эта регулярка из JS:

var rx_string = "(^|\\s|[^\\u0400-\\u04FF]|\\b)" + item.replace(".", "\\.") + "(?=\\s|[^\\u0400-\\u04FF]|\\b|$)";

 

была без проблем преобразована в:

// Вау! php поддерживает границы слов с кириллическими символами!
$rx_string = "(^|\s|\b)" . str_replace(".", "\.", $val) . "(?=\s|\b|$)";