现有一字符串:
$sumstr='30|31,40|41,50|71';要求输入一数字,就删除该数字对应的一段,具体如下:输入 30 ,则要删除 '30|31,' ,得到 '40|41,50|71'输入 40 , 则要删除 '40|41,' , 得到 '30|31,50|71'输入 50  ,  则要删除 ',50|71' , 得到 '30|31,40|41'现在的问题是 逗号 应该怎么处理,求一正则直接匹配。

解决方案 »

  1.   

    $num='50';
    $reg='/[,]{0,1}'.$num.'\|[0-9]*/';
    这样子匹配不到 30$num='30';
    $reg='/'.$num.'\|[0-9]*[,]{0,1}/';
    这样子匹配不到 50
      

  2.   


    <script type="text/javascript">
    <!--
    function delSection(num){
    var str = "30|31,40|41,50|71";
    return str.replace(new RegExp(num + "[^\\|]*?\\|"),"");
    }
    alert(delSection('31'));
    //-->
    </script>
      

  3.   

    没有纯粹使用正则表达式。$(function()
    {

    var s='30|31,40|41,50|71'; 
    var except="41";
    s=getResult(s,except);
    alert(s);
    });
    /**
    *s:要处理的字符串
    *except:要除去的元素
    */
    function  getResult(s,except)
    {
       var pattern = new RegExp(except);
       var arr=s.split(",");//分成数组
       var i;
       for(i=0;i<arr.length;i++)
       {
       if(pattern.test(arr[i]))// 找到了匹配,记录下i
       {
       arr.splice(i,1);//删除那一项
       break;
       }
       }
       return arr.toString();
    }
      

  4.   


    function delSection(str, num){
        return str.replace(new RegExp("(?:" + num + "\\|\\d+,?)|(?:,?" + num + "\\|\\d+$)"),"");
    }
    alert('delSection("30|31",30) = ' + delSection("30|31",30)); //  == ""
    alert('delSection("30|31",40) = ' + delSection("30|31",40)); //  == "30|31"
    alert('delSection("30|31,40|41",30) = ' + delSection("30|31,40|41",30)); //  == "40|41"
    alert('delSection("30|31,40|41",40) = ' + delSection("30|31,40|41",40)); //  == "30|31"
    alert('delSection("30|31,40|41,50|71",30) = ' + delSection("30|31,40|41,50|71",30)); //  == "40|41,50|71"
    alert('delSection("30|31,40|41,50|71",40) = ' + delSection("30|31,40|41,50|71",40)); //  == "30|31,50|71"
    alert('delSection("30|31,40|41,50|71",50) = ' + delSection("30|31,40|41,50|71",50)); // == "30|31,40|41"