重音不敏感的正则表达式

我的代码:

jQuery.fn.extend({ highlight: function(search){ var regex = new RegExp('(]*>)|('+ search.replace(/[.+]i/,"$0") +')','ig'); return this.html(this.html().replace(regex, function(a, b, c){ return (a.charAt(0) == '<') ? a : '' + c + ''; })); } }); 

我想突出显示带重音的字母,即:

 $('body').highlight("cao"); 

应突出显示:[ção] OR [çÃo] OR [cáo] OR expre [cão] tion或[Cáo] tion

我怎样才能做到这一点?

唯一正确的方法是首先通过Unicode规范化表D ,规范分解运行它。

然后剥离我们产生的任何标记( \pM字符,或者可能是\p{Diacritic} ,取决于),然后根据de / un-marked版本运行匹配。

在任何情况下都不要硬编码一堆文字。 伊克!

Boa sorte!

您需要提供一个替代字符表,并基于此动态生成正则表达式。 例如:

 var alt = { 'c': '[cCç]', 'a': '[aAãÃá]', /* etc. */ }; highlight: function (search) { var pattern = ''; for (var i = 0; i < search.length; i++) { var ch = search[i]; if (alt.hasOwnProperty(ch)) pattern += alt[ch]; else pattern += ch; } ... } 

然后对于search = 'cao'这将生成一个模式[cCç][aAãÃá]o