My code:
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>';
}));
}
});
I want to highlight letters with accents, ie:
$('body').highlight("cao");
should highlight: [ção] OR [çÃo] OR [cáo] OR expre[cão]tion OR [Cáo]tion
How can I do that?
You need to come up with a table of alternative characters and dynamically generate a regex based on that. For example:
Then for
search = 'cao'
this will generate a pattern[cCç][aAãÃá]o
.The sole correct way to do this is to first run it through Unicode Normalization Form D, canonical decomposition.
You then strip our any Marks that result (
\pM
characters, or perhaps\p{Diacritic}
, depending), and run your match against the de/un-marked version.Do not under any circumstances hardcode a bunch of literals. Eek!
Boa sorte!