Javascript RegExp \ b元字符,带有重音字符

时间:2018-04-14 19:43:14

标签: javascript regex character prefix

美好的一天,

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

以下是一个例子:

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

经过一些研究,我发现了一种简单的方法,使用\ 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元字符的正确行为的解决方案。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题