【发布时间】:2012-05-22 08:05:08
【问题描述】:
我正在构建搜索,我将使用 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]
=> äÄåÅöÖ
【问题讨论】:
-
@Walkerneo:
\b表示正则表达式中的“单词边界”;斜线在这里被转义,因为它在一个字符串中。 -
@apsillers,谢谢,奇怪的是我以前没见过这个:/
-
我使用 \b 是因为我想匹配每个单词的开头。
-
如您所见,Javascript 停留在 1960 年代那种愚蠢的纯 ASCII 思维模式中。它甚至不满足UTS#18 on Unicode Regular Expressions 级别 1 的“基本 Unicode 支持”所需的最基本的一致性要求。试图在 Javascript 中进行真正的 Unicode 文本处理工作是一个可怕的笑话,也是一个残酷的笑话:它无法完成。下面提到的 XRegexp 插件对于这些目的是必要的,但还不够。
-
新手注意:这不能在正则表达式中完成。不适用于
\b,不适用于\s,不适用于 XRegExp,不适用于前瞻或环视。相信我,我已经尝试了所有方法,但一切都以某种或其他方式破裂。到目前为止,我发现唯一可靠的方法是将 unicode 字符串编码回 ascii 并按照最初的预期使用\b执行仅 ascii 的正则表达式搜索/替换。见这里:stackoverflow.com/a/10590188/1329367
标签: javascript regex unicode