2015-03-15 2 views
1

У меня есть результаты поиска, возвращенные с сервера, и регулярное выражение, которое выделяет результат, используя слова в поисковом запросе.JavaScript RegEx Ignore String

words = searchQuery.split(' '); 

$.each(words, function() { 

    var word = this.trim(); 
    var regex = new RegExp('(' + word + ')(?!>|b>)', 'gi'); 

    searchResult = searchResult.replace(regex, "<b>$1</b>"); 

}); 

Это прекрасно работает, пока я не искать что-то вроде этого:

поиска: "сценарий с JavaScript"

Результат поиска: "Java скрипт является язык программирования ..."

Он должен выделить все слово как «javascript - это язык программирования ...». Однако, поскольку строка изменилась с «javascript» на «java <b> script </b>», она больше не совпадает со вторым словом в поисковом запросе. Он также создает странные значения, когда значение word равно «b», «/», «<» или «>».

Мой вопрос в том, как я могу игнорировать теги <b> и </b> в регулярном выражении и соответствовать только исходному поисковому запросу? Я попытался использовать lookahead, но это не сработало.

+3

Просто сортировать поисковые запросы по длине строки, прежде чем подсветка. – zerkms

ответ

1

Я думаю, сортировку по убыванию массива по длине строки может решить эту проблему:

words = searchQuery.split(' '); 

words.sort(function(a, b){ 
    return b.length - a.length; 
}); 

$.each(words, function() { 

    var word = this.trim(); 
    var regex = new RegExp('(' + word + ')(?!>|b>)', 'gi'); 

    searchResult = searchResult.replace(regex, "<b>$1</b>"); 

}); 
+0

hmm. это действительно работает. но есть ли способ игнорировать «» и «» в регулярном выражении? это упростит ситуацию – ameernuri

+0

@ameernuri: взгляните на аналогичную проблему - http://stackoverflow.com/a/28991840/3832970, хотя я не знаю, можете ли вы так сильно изменить поисковый запрос (например, если вы разрешаете выражение регулярного выражения). –

0

Вы не можете ничего внутри строк с помощью регулярных выражений игнорировать. Попробуйте искать целые слова, используйте «\ б»

var searchQuery = 'script with lang javascript'; 
 
var searchResult = 'javascript is a programming language'; 
 
words = searchQuery.split(' '); 
 

 
$.each(words, function() { 
 

 
    var word = this.trim(); 
 
    var regex = new RegExp('\\b(' + word + ')\\b(?!>|b>)', 'gi'); 
 

 
    searchResult = searchResult.replace(regex, "<b>$1</b>"); 
 

 
}); 
 
console.log(searchResult);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

, но слово не может быть границей. как скрипт в javascript! – ameernuri

+0

@ameernuri дайте мне пример с проблемой, plz – tutankhamun