2013-12-15 5 views
0

Привет всем я нашел следующий код, который находит слово в пределах страницы:RegExp Javascript матч любое слово

JSFiddle & Original Page

function searchAndHighlight(searchTerm, selector) { 
    if(searchTerm) { 
     //var wholeWordOnly = new RegExp("\\g"+searchTerm+"\\g","ig"); //matches whole word only 
     //var anyCharacter = new RegExp("\\g["+searchTerm+"]\\g","ig"); //matches any word with any of search chars characters 
     var selector = selector || "body";        //use body as selector if none provided 
     var searchTermRegEx = new RegExp(searchTerm,"ig"); 
     var matches = $(selector).text().match(searchTermRegEx); 
     if(matches) { 
      $('.highlighted').removeClass('highlighted');  //Remove old search highlights 
       $(selector).html($(selector).html() 
        .replace(searchTermRegEx, "<span class='highlighted'>"+searchTerm+"</span>")); 
      if($('.highlighted:first').length) {    //if match found, scroll to where the first one appears 
       $(window).scrollTop($('.highlighted:first').position().top); 
      } 
      return true; 
     } 
    } 
    return false; 
} 

$(document).ready(function() { 
    $('#search-button').on("click",function() { 
     if(!searchAndHighlight($('#search-term').val())) { 
      alert("No results found"); 
     } 
    }); 
}); 

В коде вы можете увидеть его имеет вар anyCharacter = новый RegExp ("\ g [" + searchTerm + "] \ g", "ig"); // соответствует любому слову с любыми символами символов поиска.

Однако, когда я пытаюсь использовать что RegExp так:

var searchTermRegEx = new RegExp("\\g["+searchTerm+"]\\g","ig"); 

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

Любая помощь будет замечательной!

+0

Это может помочь вам http://stackoverflow.com/questions/9794851/find-text-string-in-jquery-and-make-it-bold/9795091 # 9795091 – elclanrs

ответ

0

Чтобы соответствовать любое слово, попробуйте

/^\b\w+\b$/i 

Регулярное выражение соответствует несколько символов между границами слова

Заменить

var searchTermRegEx = new RegExp("\\g["+searchTerm+"]\\g","ig"); 

с

var searchTermRegEx = /^\b\w+\b$/i; 

Разница заключается в том, что мы используем литерал регулярного выражения, чем использование объекта regex.

+1

Стартовые и конечные символы плюс глобальный флаг здесь не имеют особого смысла. – elclanrs

+0

Был ли путаница, включать или нет. Исправлена. –

+0

@ aliasm2k Где бы это было в коде в моем OP? Можете ли вы использовать это с примером кода? – StealthRT

0

Этот fiddle работает.

Не знаете, что думали оригинальные авторы с помощью материала \\ g.

Ключ это регулярное выражение:

 searchRegex = new RegExp('(\\b)(' + searchTerm + ')(\\b)','ig'); 
+0

Не знаете, что твоя скрипка работает? Если вы введете ** туз **, он говорит, что не может его найти .. хотя * space * имеет * ace * в нем. – StealthRT

+0

Возможно, я смотрю на это неправильно. Я ищу тип ** подстановочного символа **, который вы бы нашли в SQL Query **% anyHere% **. – StealthRT

+0

Ах, я неправильно понял. Это решение находит только целые слова. Gimme в секунду, чтобы соответствовать частичным ... См. Http://jsfiddle.net/wmca4/5/ –

Смежные вопросы