js 用正则表达式模仿SQL like % 的模糊匹配

作者:Yan

//过滤筛选
function dCell_ChangeCell(col, row, text) {
  if(row == 2)
    {
        var colCount= dCell.GetCols(0);
        var rowCount= dCell.GetRows(0);
        var v_row;
        var v_col;
        var arr_header = new Array();
        var filterExpr = "",filterExprLen=0;
        for(v_col=1;v_col<=maxFilterCol;v_col++){
          filterExpr = dCell.GetCellString2(v_col,2,0).toUpperCase();
          filterExprLen = filterExpr.length;
          if( filterExprLen > 0 & filterExpr.indexOf("%") === filterExprLen-1 & filterExpr.lastIndexOf("%") === filterExprLen-1 ) {   //模糊匹配:开头固定
            filterExpr = "^"+filterExpr.replace(/%/g,"");
            filterExpr = new RegExp(filterExpr);
          } else if( filterExprLen > 0 & filterExpr.indexOf("%") === 0 & filterExpr.lastIndexOf("%") === 0 ) { //模糊匹配:结尾固定
            filterExpr = filterExpr.replace(/%/g,"")+"$";
            filterExpr = new RegExp(filterExpr);
          } else if( filterExprLen > 0 & filterExpr.indexOf("%") === 0 & filterExpr.lastIndexOf("%") === filterExprLen-1  ) {   //模糊匹配:中间固定
            filterExpr = filterExpr.replace(/%/g,"");
            filterExpr = new RegExp(filterExpr);
          } else {}

          arr_header[v_col-1] = filterExpr;

        }
        var v_flag, v_value1, v_value2;
        for(v_row=3;v_row<rowCount;v_row++)
        {
            v_flag = 0;
            for(v_col=1;v_col<=maxFilterCol;v_col++)
            {
                v_value1 = arr_header[v_col-1];
                if(v_value1 == ""||text == "")
                    continue;

                v_value2 = dCell.GetCellString(v_col,v_row,0).toUpperCase();

                /*if( v_value2.indexOf(v_value1) == -1 ){
                    v_flag = 1;
                    break;
                }*/
                //如果精确查询和模糊查询都不匹配,则标记为隐藏
                //alert(v_value1 + " : " +v_value2);
                if ( v_value1.constructor === String & v_value1 !== v_value2 ) {
                  v_flag = 1;
                    break;
                } else if ( v_value1.constructor === RegExp & !(v_value1.test(v_value2)) ) {
                  v_flag = 1;
                    break;
                } else {}
            }

            if(v_flag == 1)
                dCell.SetRowHidden(v_row,v_row);
            else
                dCell.SetRowUnHidden(v_row,v_row);
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值