Улучшение RegEx для выделения текста на странице с использованием заданных условий поиска

У меня здесь есть рабочий код, который выделяет точные совпадения с заданным поисковым запросом.

highlight: function(html, search) {
        $.each(search.split(' '), function(idx, word) {
            if (word != '') {
                html = html.replace(new RegExp(word, 'gi'), '<mark>' + word + '</mark>')
            }
        });
        return html;
}

Хочу также выделить «менее точные совпадения».

Например: «9375551234» должен выделять «(937) 555-1234»
или: «oneil» должен выделять «O'neil»

Примечание. Я заменяю совпадение словом, а не совпадающим содержанием. Решение должно располагаться вокруг исходного содержимого.

Заранее благодарим за уделенное время!


person Joshua    schedule 23.04.2015    source источник
comment
Поиск javascript с нечетким регулярным выражением дает множество полезных результатов. Вы также можете попробовать эту суть   -  person Sidd    schedule 23.04.2015


Ответы (1)


Вы можете изменить слово поиска, чтобы принять любой специальный символ после или до него.

word = "9375551234"
regex_word = ""
for(var i = 0; i < word.length; i++) {
 regex_word += '[^\\w]*' + word[i];
};

"(937) 555-1234".replace(new RegExp(regex_word, 'gi'), 's'); // 's'

и для этого:

word = "oneil"
regex_word = ""
for(var i = 0; i < word.length; i++) {
  regex_word += '[^\\w]*' + word[i];
};
new RegExp(regex_word, 'gi')
s = "O'ne-il".replace(new RegExp(regex_word, 'gi'), 's'); // 's'

так для тебя будет

highlight: function(html, search) {
    $.each(search.split(' '), function(idx, word) {
        if (word != '') {
          regex_word = ""
          for(var i = 0; i < word.length; i++) {
             regex_word += '[^\\w]*' + word[i];
          };

            html = html.replace(new RegExp(regex_word, 'gi'), '<mark>' + word + '</mark>')
        }
    });
    return html;
}
person mohamed-ibrahim    schedule 23.04.2015