Javascript RegExp + 单词边界 + unicode 字符

标签 javascript regex unicode

我正在构建搜索,我将使用 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);   
}

http://jsfiddle.net/7TsxB/

那么我怎样才能让那些 ä,ö 和 å 字符与 javascript 正则表达式一起工作呢?

我想我应该使用 unicode 代码,但我应该怎么做呢?这些字符的代码是: [\u00C4,\u00E4,\u00C5,\u00E5,\u00D6,\u00F6]

=> äÄåÅöÖ

最佳答案

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);   
}

分割:

(?: 圆括号 () 形成 Regex 中的捕获组。圆括号以问号和冒号开头 ?: 形成非-捕获组。他们只是将术语组合在一起

^ 插入符号匹配字符串的开头

| 栏是“或”运算符。

\s 匹配空格(在字符串中显示为 \\s 因为我们必须转义反斜杠)

) 关闭群组

因此,我们没有使用匹配单词边界且不适用于 unicode 字符的 \b,而是使用匹配字符串开头或空格的非捕获组。

关于Javascript RegExp + 单词边界 + unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590098/

相关文章:

javascript - 如何使用css和jquery始终顺时针旋转?

MySQL MATCH AGAINST 使用通配符返回带有撇号的意外结果

regex - Protobuf3 : String validation with regex

c# - 如何在浏览器标题中加入 Unicode

Python Unicode 警告 : Unicode equal comparison failed to convert both arguments to Unicode

javascript - jQuery 获取第 n 个 :child from table after creating that with ajax

带参数的 Javascript 字符计数器函数

javascript - 设置可拖动div的位置

javascript - 字符串到对象的转换?

javascript - 当文本可以包含非拉丁字母时如何计算字符长度