Javascript 匹配时带有重音字符的Regexp

Javascript 匹配时带有重音字符的Regexp,javascript,regex,Javascript,Regex,当用户尝试验证时,我必须检查文本区域中的禁止字。 禁忌词列表存储在jsBlackList数组中,这是我目前代码的一部分: var fieldValue = value; var hasForbiddenWord = false; for (i = 0; i < jsBlackList.length; i++) { var regex = new RegExp("\\b"+jsBlackList[i]+"\\b","gi"); fieldValue = fieldValue.

当用户尝试验证时,我必须检查文本区域中的禁止字。 禁忌词列表存储在
jsBlackList
数组中,这是我目前代码的一部分:

var fieldValue = value;
var hasForbiddenWord = false;
for (i = 0; i < jsBlackList.length; i++) {
    var regex = new RegExp("\\b"+jsBlackList[i]+"\\b","gi");
    fieldValue = fieldValue.replace(regex, '***');
    hasForbiddenWord = hasForbiddenWord || fieldValue.match(regex);
}
value = fieldValue;
var fieldValue=value;
var HasBankedenWord=false;
对于(i=0;i
但问题是,
jsBlackList
有一些带重音的字符,而用户可以不带重音地书写(例如,jsBlackList可以有“déjá”,用户键入了“deja”、“déja”或“dejá”)

如何检查缺少的口音


注意:关于“标记为重复”:重复的问题是关于“不带重音的regexp检查带重音的文本”,我的问题是“带重音的regexp检查带潜在缺失重音的文本”。

我认为你最好的选择是:

  • 删除黑名单中的所有重音字符
  • 处理文本以将重音字符替换为其非重音等效字符

然后,您可以进行比较,而不必费心寻找重音。

您需要创建一个等价物列表,并在正则表达式或所有等价物中:

dé|ejà|a

实现这一点的一个方法是我稍微改变一下你的黑名单:

用相同的替换替换所有带重音的字符

例如:
“déjá”
到:
“d(e)j(a)”


如果您的黑名单很大,那么您可能希望自动执行此替换,但最终这样编写黑名单是很方便的。

您可以尝试这样做:
d[ée]j[a]
字符类更适合此-d[ée]j[a]最后,这就是我使用的。我不得不重做黑名单,但我认为这是最好的解决方案。字符类也很好。可读性偏好可能会决定。这是一种简单的方法,但正如你所看到的,我必须将匹配的禁止字符替换为三元组*。如果我按照你的解释去做的话,就很难只改变匹配的单词,因为其他单词或者文本需要保留他的重音字符。