нечувствительное к ударению регулярное выражение
Мой код:
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>';
}));
}
});
Я хочу выделить буквы с ударениями, ie:
$('body').highlight("cao");
Следует выделить: [ção] или [çÃo] или [cáo] или expre[cão]tion или [Cáo] tion
Как я могу это сделать?
2 ответа:
Единственный правильный способ сделать это-сначала запустить его черезUnicode Normalization Form D , canonical decomposition.
Затем вы снимаете все наши метки, которые приводят (
\pM
символов, или, возможно,\p{Diacritic}
, в зависимости), и запускаете матч против версии de / un-marked.Ни при каких обстоятельствах не Закодируйте связку литералов. ИК!
Боа сорт!
Вам нужно придумать таблицу альтернативных символов и динамически генерировать регулярное выражение на ее основе. Например:
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
.