我的代码:
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 : '<strong class="highlight">' + c + '</strong>';
}));
}
});
我想突出显示带重音的字母, 即:
$('body').highlight("cao");
应突出显示:[ção] OR [çÃo] OR [cáo] OR expre [cão] tion或[Cáo] tion
我该怎么做?
答案 0 :(得分:5)
执行此操作的唯一正确方法是首先通过 Unicode规范化表单D 运行,规范分解。
然后删除我们产生的任何标记(\pM
字符,或者\p{Diacritic}
,取决于),然后针对de / un-marked版本运行匹配。
在任何情况下都不要硬编码一堆文字。 EEK!
Boa sorte!
答案 1 :(得分:3)
您需要提供一个替代字符表,并根据该表动态生成正则表达式。例如:
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
。