Поясните, пожалуйста, почему не работает граница слова \b для русских слов, в то время, когда для английских работает.
var str = "one один two два three"
var work = str.match(/([\w])+\b|([а-я])+/giu);
console.log(work, ":Без \\b для русских слов:");
//вот тут
var notWork = str.match(/([\w])+\b|([а-я])+\b/giu);
console.log( notWork, ":c \\b для русских слов:");
Ответ
Правила работы регулярных выражений описаны в спецификации
При проверке \b выполняются следующие шаги:
Выполняется функция IsWordChar для текущего символа и предыдущего.
Если полученные значения различаются - возвращается true
В противном случае - false
Что представляет из себя функция IsWordChar?
В данной функции идет простая проверка вхождения символа в заранее заданный список символов. Список символов включает в себя следующие 63 (26*2+10+1) символов, жестко прописанных в спецификации:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 _
Как видно, здесь отсутствуют все символы, кроме английского, цифр и знака подчеркивания.
Комментариев нет:
Отправить комментарий