Кажется, что проблема с Regex и границей слов \b
соответствует началу строки с начальным символом из нормального диапазона в 256 байт.
Вместо использования \b
попробуйте использовать (?:^|\\s)
var title = "this is simple string with finnish word tämä on ääkköstesti älkää ihmetelkö";
// Does not work
var searchterm = "äl";
// does not work
//var searchterm = "ää";
// Works
//var searchterm = "wi";
if ( new RegExp("(?:^|\\s)"+searchterm, "gi").test(title) ) {
$("#result").html("Match: ("+searchterm+"): "+title);
} else {
$("#result").html("nothing found with term: "+searchterm);
}
Breakdown:
(?:
скобки ()
образуют группу захвата в Regex. Скобка начинается с вопросительного знака, а двоеточие ?:
формирует группу, не связанную с захватом. Они просто группируют термины вместе
^
символ каретки совпадает с началом строки
|
, бар является оператором «или».
\s
соответствует пробелу (отображается как \\s
в строке, потому что нам нужно избежать обратного слэша)
)
закрывает группу
So вместо использования \b
, который соответствует границам слов и не работает для символов Юникода, мы используем группу, не связанную с захватом, которая соответствует началу строки ИЛИ пробела.