2013-12-15 44 views
0

嘿所有我發現下面的代碼,找到頁面中的一個詞:正則表達式的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"); 
     } 
    }); 
}); 

中的代碼,你可以看到它有VAR anyCharacter =新的RegExp(「\ g [」+ searchTerm +「] \ g」,「ig」); //匹配任何搜索字符的字符

然而,當我嘗試使用正則表達式,像這樣:

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; 

的區別是我們正在使用正則表達式比使用正則表達式對象。

+1

開始和結束字符以及全局標誌在這裏沒有多大意義。 – elclanrs

+0

不知道是否包含它。固定。 – 2013-12-15 22:27:12

+0

@ aliasm2k我的OP中的代碼在哪裏?你可以使用代碼示例嗎? – StealthRT

0

這個fiddle的作品。

不知道原作者是用\\ g的東西來思考的。

的關鍵是這個表達式:

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

不確定你的小提琴的作品?如果你輸入** ace **,它說它找不到它,即使* space *有* ace *。 – StealthRT

+0

也許我看着這個錯誤的方式..我正在尋找一種**通配符**,就像你會發現在SQL查詢**%whateverHere%**。 – StealthRT

+0

啊,我誤解了。該解決方案只能找到整個單詞。給我一秒來匹配部分....看到http://jsfiddle.net/wmca4/5/ –