Javascript RegExp + Word边界+ 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]


=>äÄåÅöÖ


猛跑小猪
浏览 839回答 3
3回答

POPMUISE

\bJavaScript RegEx中的字符类实际上只对简单的ASCII编码有用。  \b是字符串\w和\W集合之间的边界的快捷代码,以及\w字符串的开头或结尾。这些字符集仅考虑ASCII“单词”字符,其中\w等于[a-zA-Z0-9_]并且\W是该类的否定。这使得RegEx角色类在处理任何真实语言方面基本无用。\s 如果搜索条件仅由空格分隔,则应该适用于您想要执行的操作。

Qyouu

这个问题很老,但我认为我找到了一个更好的解决方案,用于使用unicode字母的正则表达式中的边界。使用XRegExp,您可以实现有效的\ b边界扩展它XRegExp('(?=^|$|[^\\p{L}])')结果是4000多个字符长,但似乎工作很好。一些解释:(?=)是一个零长度前瞻,它查找开始或结束边界或非字母unicode字符。最重要的想法是前瞻,因为\ b不会捕获任何东西:它只是真或假。
打开App,查看更多内容
随时随地看视频慕课网APP