我目前正在开发一个JavaScript功能,涉及突出显示搜索结果。具体地说,我想实现一个功能,在一个句子中搜索一个词,比如“sea”,比如“the sea causes me恶心in this season”,将导致单词“sea”和任何它作为前缀的情况,比如单词“season”被高亮显示。然而,我不想强调“sea”作为后缀出现在单词“恶心”中的情况,也不想强调它在单词“疾病”中的情况。
为了实现这一点,我使用正则表达式/\bsea/gmi
,它可以完美地处理英语字符。然而,当应用于瑞典语字符时,它无法产生所需的结果,如'ä'、' å'和'ö'。例如,如果搜索词是“gen”,则单词“vägen”中的后缀“gen”被错误地突出显示。看起来正则表达式将这些字符视为特殊字符或类似的字符。我甚至尝试添加Unicode修饰符u,但这也没有帮助。
由于我的专业知识主要是C#,所以我不熟悉JavaScript在这种情况下的行为。我将非常感谢任何关于JavaScript如何处理这些情况或如何解决这个问题的见解或指导。
2条答案
按热度按时间uxh89sit1#
JavaScript的正则表达式引擎不会根据
u
标志的存在而改变\b
的行为。但幸运的是,您可以使用Unicode属性类来模仿它。在这种情况下,你的正则表达式看起来像这样:
/(?<![\p{L}\p{N}_])gen/gmiu
。在这里,我们检查(使用negative lookbehind)
gen
前面没有任何:\p{L}
:字母(任何语言),\p{N}
:数字(任何语言)_
。基本上
[\p{L}\p{N}_]
是\w
的替代品,并考虑了u
标志。请注意,这是其他一些正则表达式引擎的默认行为,例如PCRE。演示here。
一般情况下,
\b
可以替换为/(?<![\p{L}\p{N}_])(?=[\p{L}\p{N}_])|(?<=[\p{L}\p{N}_])(?![\p{L}\p{N}_])/gmu
。演示here。
eit6fx6z2#
您可以更改您的正则表达式来处理瑞典语字符,如下所示:
gmi
用于执行全局搜索mark
标记用于突出显示文本