javascript正则表达式.search

时间:2013-03-11 10:02:56

标签: javascript search

我对.search有一点问题

这是代码

// filter - posts
jQuery('.filter_by').live('click',function(){
    var target_fi = jQuery(this);
    var target_cat = target_fi.parents('.cat').children('.namechanger').val(); 
    target_fi.next().fadeIn(100);


    var cat_all = target_fi.prev().find("option").each(function(i){
        if(jQuery(this).attr('data-cats').search(target_cat)  == -1){
            jQuery(this).css({"display":"none"});
        }
    });


});

我想将变量target_cat与.search

一起使用

我不能这样做.search(/target_cat/)

3 个答案:

答案 0 :(得分:1)

如果你想使用target_cat的字符串值创建正则表达式,那么你可以这样做:

var mySearchTerm = new RegExp(target_cat);

...

if(jQuery(this).attr('data-cats').search(mySearchTerm)  == -1){

答案 1 :(得分:1)

您需要创建RegExp对象并将其传递给search方法

if(jQuery(this).attr('data-cats').search(new RegExp(target_cat)) == -1 )){
...
}

答案 2 :(得分:1)

要将任何转换为正则表达式,只需将其放入构造函数中:

var something =“foobar”;    var expression = new RegExp(something,'i');

注意标志的第二个参数。有关构造函数的详细信息,请参阅RegExp;有关工作原理的详细信息,请参阅Regular Expressions

如果您的something包含“特殊字符”(例如|?{),则需要将其转义,如果您希望它们的字面意思是(/foo?//foo\?/)。这是一个能够为您解决所有相关角色的功能:

function escapeRegEx(string) {
  return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
}

  • 您使用的是jQuery.live,但应使用jQuery.on代替
  • .match()足够
  • 时,您正在使用.search()
  • jQuery(this).css({"display":"none"});足够
  • 时,您使用的是明确的jQuery(this).hide();
  • 请注意,您在循环中重复jQuery(this) - 一个应该足够 - 变量是您的朋友。