带有重音字符的Javascript RegExp \ b元字符[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

美好的一天,

我目前正在研究用Javascript制作的搜索栏组件。我想找到一种方法来保存每个字符串结果,其中至少有一个单词以输入提供的值为前缀。

这是一个例子:

  • “这是一个例子”将与这些输入相匹配:“this”,“is”,“ex”......“

经过一些研究,我找到了一个简单的方法,使用\ b元字符:

let _regex = new RegExp('\\b(inputValue)', 'gi'),
    _match = _regex.exec("My Full Sentence");

说实话,只要句子不是由重音字符组成,它就能很好地工作。事实上,当一个单词以重音字符开头时,\ b元字符不能按预期工作。

例如 :

  • “léviter”将与“léviter”正确匹配
  • “éviter”将与“léviter”奇怪地匹配
  • “éviter”奇怪地与“éviter”不匹配

我创建了一个包含更多示例的JSFiddle:https://jsfiddle.net/9L7vee46/46/

因此,我想知道是否存在使用\ b元字符具有正确行为的解决方案。

谢谢你的帮助。

javascript regex character prefix
1个回答
0
投票

规范化文本和搜索字符串以使用相同类型的重音字符。

在Unicode中,由于历史原因,某些字符有两种不同类型的重音字符:单个代码点和多个代码点。您的正则表达式库以不同方式对待它们,因为实际上它们是不同的。在搜索之前,选择一个并用其替换另一个用于每个歧义的实例(读取:对于每个有两个编码的字符)。

在ES6中,您可以使用"".normalize()执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.