2013-07-19 38 views
1

你能告诉我为什么应用程序在页面上搜索文本时使用这个特殊字符崩溃。我从页面中搜索文本。它工作正常,但使用像这样的特殊字符时会崩溃“(+?)”it去之前的屏幕.. 其次\ t。搜索功能在使用特殊字符“(+?)”时崩溃,同时灼烧文本..?

这是我的小提琴..? http://jsfiddle.net/4BAau/5/

function searchAndHighlight(searchTerm, selector) { 
    if (searchTerm) { 
     var selector = selector || "#realTimeContents"; 
     var searchTermRegEx = new RegExp('('+searchTerm+')', "ig"); 
     var matches = $(selector).text().match(searchTermRegEx); 
     if (matches != null && matches.length > 0) { 
      $('.highlighted').removeClass('highlighted'); 

      $span = $('#realTimeContents span'); 
      $span.replaceWith($span.html()); 

      var txt = $(selector).text().replace(searchTermRegEx, '<span class="match">$1</span>'); 

      $(selector).html(txt); 

      $('.match:first').addClass('highlighted'); 

      var i = 0; 

      $('.next_h').off('click').on('click', function() { 
       i++; 

       if (i >= $('.match').length) i = 0; 

       $('.match').removeClass('highlighted'); 
       $('.match').eq(i).addClass('highlighted'); 
       $('.ui-mobile-viewport').animate({ 
        scrollTop: $('.match').eq(i).offset().top 
       }, 300); 
      }); 
      $('.previous_h').off('click').on('click', function() { 

       i--; 

       if (i < 0) i = $('.match').length - 1; 

       $('.match').removeClass('highlighted'); 
       $('.match').eq(i).addClass('highlighted'); 
       $('.ui-mobile-viewport').animate({ 
        scrollTop: $('.match').eq(i).offset().top 
       }, 300); 
      }); 




      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).on('click', '.searchButtonClickText_h', function (event) { 

    $(".highlighted").removeClass("highlighted").removeClass("match"); 
    if (!searchAndHighlight($('.textSearchvalue_h').val())) { 
     alert("No results found"); 
    } 


}); 
+0

可能重复的有在JavaScript中的RegExp.escape函数?](http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript) –

回答

0

这些字符在正则表达式特殊的含义 - 他们需要进行转义

更新 - 一个非常快速的(和有点脏)FIX:

var searchTermRegEx = new RegExp('('+searchTerm.replace(/([[\]()+{}?])/,'\\$1')+')', "ig"); 
的[
+0

你可以做一个。然后我会尽我所能自己.. – user2563256

+0

@ user2563256:http://stackoverflow.com/q/356 1493/218196 –

+0

不明白.. !! – user2563256

相关问题