我正在构建搜索,我将使用 javascript 自动完成功能。我来自芬兰(芬兰语),所以我必须处理一些特殊字符,例如 ä、ö 和 å
当用户在搜索输入字段中键入文本时,我尝试将文本与数据进行匹配。
这是一个简单的示例,如果用户键入“ää”,则该示例将无法正常工作。与“äl”相同
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("\\b"+searchterm, "gi").test(title) ) {
$("#result").html("Match: ("+searchterm+"): "+title);
} else {
$("#result").html("nothing found with term: "+searchterm);
}
那么如何让这些 ä、ö 和 å 字符与 javascript 正则表达式一起使用?
我想我应该使用 unicode 代码,但是我应该怎么做呢?这些字符的代码是:
[\u00C4,\u00E4,\u00C5,\u00E5,\u00D6,\u00F6]
=> äÄåÅöÖ
最佳答案
正则表达式和单词边界 \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);
}
分割:
(?:
括号 ()
在正则表达式中形成捕获组。括号以问号开头,冒号 ?:
形成非-捕获组。他们只是将术语组合在一起
^
插入符号与字符串的开头匹配
|
横条是“或”运算符。
\s
匹配空格(在字符串中显示为 \\s
因为我们必须转义反斜杠)
)
关闭群组
因此,我们不使用匹配单词边界且不适用于 unicode 字符的 \b
,而是使用匹配字符串开头或空格的非捕获组。
关于Javascript RegExp + 单词边界 + unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408396/