[[{I:19, M:0, E:1, N:20, C:"8", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]
有这样一个JSON串,我想查找I:28开头的这样一个元素,然后用正则匹配,替换这个元素所在的整个{}为空,例如把{I:28, M:0, E:1, N:10, C:3, R:1}替换为空,以I:28开头的这个元素,在这个JSON中的位置不是固定的,其中的M,E,N,C,R的值也是不固定的,在{}的前面或后面或许会有“,”也或许没有“,”,如果前面有“,”就把“,”也删除,如果后面有“,”就把后面的“,”也删除,如果前面跟后面都有“,”,那么随便删除一个,查找以I:28为开头的{},然后替换这个{}为空
希望大家帮忙,谢谢,大半夜的发帖不容易,顶我哦^_^

解决方案 »

  1.   

    string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
    Regex reg = new Regex(@"(?<s>(?:,\s*))?{I:28[^}]*}(?(s)|(?:\s*,)?)");
    //Regex regDel = new Regex(@"(,\s*)?{I:28[^}]*}(\s*,)?");
    //string result = regDel.Replace(test, delegate(Match m) { if (m.Groups[1].Success && m.Groups[2].Success) return ","; return ""; });
    string result = reg.Replace(test, "");
    richTextBox2.Text = result;
    这是过客兄给出的C#解决方法,现在求JS解决方法,谢谢
      

  2.   

    string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
    Regex reg = new Regex(@"(?<s>(?:,\s*))?{I:28[^}]*}(?(s)|(?:\s*,)?)");
    //Regex regDel = new Regex(@"(,\s*)?{I:28[^}]*}(\s*,)?");
    //string result = regDel.Replace(test, delegate(Match m) { if (m.Groups[1].Success && m.Groups[2].Success) return ","; return ""; });
    string result = reg.Replace(test, "");
    richTextBox2.Text = result;
    这是过客兄给出的C#解决方法,现在求JS解决方法,谢谢
      

  3.   

    既然是json串,那在javascript中应该有更方便的处理方法的,用正则有点绕了<script type="text/javascript"> 
    var str = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
    var reg = /(,\s*)?{I:28[^}]*}(\s*,)?/;
    var result = str.replace(reg, function($0, $1, $2)
        {
            if($1 != null && $2 != null && $1.replace(/ /g, "") == "," && $2.replace(/ /g, "") == ",")
                return ",";
            return "";
        });
    document.write(result);
    </script>
      

  4.   

    记事本里复制过来的,格式怎么成了这样<script type="text/javascript"> 
    var str = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2,
    R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
    var reg = /(,\s*)?{I:28[^}]*}(\s*,)?/;
    var result = str.replace(reg, function($0, $1, $2)
        {
            if($1 != null && $2 != null && $1.replace(/ /g, "") == "," && $2.replace(/ /g, "") == ",")
                return ",";
            return "";
        });
    document.write(result);
    </script>
      

  5.   

    汗,再来<script type="text/javascript"> 
    var str = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
    var reg = /(,\s*)?{I:28[^}]*}(\s*,)?/g;
    var result = str.replace(reg, function($0, $1, $2)
        {
            if($1 != null && $2 != null && $1.replace(/ /g, "") == "," && $2.replace(/ /g, "") == ",")
                return ",";
            return "";
        });
    document.write(result);
    </script>
      

  6.   

    过客:既然是json串,那在javascript中应该有更方便的处理方法的,用正则有点绕了如果把json生成对象数组,然后用for循环遍历每一个对象,判断对象的I是否=18速度快还是用正则速度快呢?谢谢
      

  7.   

    现在有一个问题是:如果我的正则是var reg = /(,\s*)?{I:1[^}]*}(\s*,)?/g;
    那么他会把所有I开头为1的多替换为空,如I:1   I:11   I:15  I:19等,麻烦过客兄再给解决下,谢谢
    上面那个C#.NET的应该也存在这个问题,如果有时间麻烦您一并给解决吧
      

  8.   

    起的好早。。
    这东西可以用JSon来处理么。
      

  9.   

    var reg = /(,\s*)?{I:1[^}]*}(\s*,)?/g;
    如果是1的话
    var reg = /(,\s*)?{I:1[\d^}]*}(\s*,)?/g;
      

  10.   


    //刚写错
    var reg = /(,\s*)?{I:1[^\d}]*}(\s*,)?/g;
      

  11.   


    我不了解JSON,不过按道理JSON处理起来,不应该是这样处理的,应该有更简单的方法
      

  12.   


    加个\b改为
    var reg = /(,\s*)?{I:1\b[^}]*}(\s*,)?/g;
    C#的也是同样的处理方式
      

  13.   

    可以先转为数组,然后在取出里面的每一项(这里都是json格式),然后判断json["I"]是不是等于18,不等于的在把他pust到数组里            var str = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
                var arr = eval("("+str+")");
                var array = new Array();
                for(var i=0;i<arr.length;i++){
                    var js="[";
                    for(var j=0;j<arr[i].length;j++){
                        var json = arr[i][j];
                        if(json["I"]!="18"){
                            js += "{";
                            for(var s in json){
                                js+="\""+s+"\":\""+json[s]+"\",";
                            }
                            js=js.substring(0,js.length-1)+"},"
                        }
                    }
                    array.push(js.substring(0,js.length-1)+"],");
                }
                var result = array.join("");
                document.write(result.substring(0,result.length-1))
    /*
    结果
    [{"I":"19","M":"0","E":"1","N":"20","C":"8","R":"1"},
    {"I":"1","M":"0","E":"1","N":"10","C":"1","R":"1"},
    {"I":"3","M":"0","E":"1","N":"10","C":"1","R":"1"},
    {"I":"2","M":"0","E":"1","N":"10","C":"1","R":"1"},
    {"I":"25","M":"1","E":"1","N":"10","C":"3","R":"1"},
    {"I":"26","M":"1","E":"1","N":"10","C":"3","R":"1"}],
    [{"I":"15","M":"0","E":"1","N":"4","C":"7","R":"1"},
    {"I":"8","M":"0","E":"1","N":"4","C":"2","R":"1"},
    {"I":"5","M":"0","E":"1","N":"4","C":"2","R":"1"},
    {"I":"4","M":"0","E":"1","N":"4","C":"2","R":"1"},
    {"I":"23","M":"0","E":"1","N":"10","C":"3","R":"1"},
    {"I":"22","M":"0","E":"1","N":"10","C":"3","R":"1"},
    {"I":"21","M":"0","E":"1","N":"10","C":"3","R":"1"}],
    [{"I":"16","M":"0","E":"1","N":"4","C":"7","R":"1"},
    {"I":"9","M":"0","E":"1","N":"10","C":"1","R":"1"},
    {"I":"7","M":"0","E":"1","N":"4","C":"2","R":"1"},
    {"I":"6","M":"0","E":"1","N":"4","C":"2","R":"1"},
    {"I":"28","M":"0","E":"1","N":"10","C":"3","R":"1"},
    {"I":"27","M":"0","E":"1","N":"10","C":"3","R":"1"},{"I":"24","M":"0","E":"1","N":"10","C":"3","R":"1"}],
    [{"I":"20","M":"0","E":"1","N":"30","C":"8","R":"0"},
    {"I":"17","M":"0","E":"1","N":"30","C":"8","R":"1"},
    {"I":"30","M":"0","E":"0","N":"1","C":"9","R":"1"},{"I":"14","M":"0","E":"0","N":"1","C":"9","R":"1"},
    {"I":"12","M":"0","E":"0","N":"1","C":"9","R":"1"},
    {"I":"11","M":"0","E":"1","N":"10","C":"1","R":"1"},
    {"I":"10","M":"0","E":"1","N":"10","C":"1","R":"1"}]
    */
      

  14.   

    [[{I:3,M:0,E:1,N:10,C:1,R:1},{I:8,M:0,E:1,N:4,C:5,R:1},{I:13,M:0,E:1,N:4,C:5,R:0},{I:32,M:0,E:1,N:20,C:1,R:0},{I:31,M:0,E:1,N:10,C:1,R:0},{I:30,M:0,E:1,N:10,C:1,R:0},{I:27,M:0,E:1,N:10,C:1,R:0},{I:26,M:0,E:1,N:10,C:1,R:0},{I:25,M:0,E:1,N:10,C:1,R:0},{I:18,M:0,E:1,N:24,C:3,R:0},{I:16,M:0,E:1,N:15,C:4,R:0},{I:5,M:0,E:1,N:30,C:4,R:0},{I:17,M:0,E:1,N:30,C:4,R:0}],[{I:1,M:0,E:1,N:10,C:1,R:1},{I:2,M:0,E:1,N:10,C:1,R:0},{I:14,M:0,E:1,N:10,C:1,R:0},{I:15,M:0,E:1,N:10,C:1,R:0},{I:23,M:0,E:1,N:4,C:5,R:0},{I:24,M:0,E:1,N:10,C:1,R:0}],[{I:10,M:0,E:0,N:1,C:7,R:0},{I:6,M:0,E:1,N:4,C:5,R:1},{I:9,M:0,E:1,N:4,C:5,R:1},{I:7,M:0,E:1,N:4,C:5,R:1},{I:12,M:0,E:1,N:4,C:5,R:0}],[{I:22,M:0,E:0,N:1,C:7,R:0},{I:11,M:0,E:0,N:1,C:7,R:0},{I:21,M:0,E:0,N:1,C:7,R:1},{I:4,M:0,E:0,N:1,C:7,R:0}]]哥们,这些JSON中没有空格所以麻烦了
      

  15.   

    var reg = /(,\s*)?{I:18\b[^}]*}(\s*,)?/g;
    请问我I:后面的那个18是变量应该怎么写呢?我用双引号括起来,如var reg="/(,\s*)?{I:"+18+"\b[^}]*}(\s*,)?/g";
    这样就不起作用了求解,谢谢
      

  16.   

    <input id="number" type="text"><br />
    <input type="Submit" value="处理" onclick="opt();"><br />
    <textarea id="result" rows="10" cols="100"></textarea><br /> 
    <script type="text/javascript"> 
    function opt()
    {
        var str = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
        var number = document.getElementById("number").value;
        var reg = new RegExp("(,\\s*)?{I:" + number + "\\b[^}]*}(\\s*,)?", "g");
        var result = str.replace(reg, function($0, $1, $2)
            {
                if($1 != null && $2 != null && $1.replace(/ /g, "") == "," && $2.replace(/ /g, "") == ",")
                    return ",";
                return "";
            });
        document.getElementById("result").value = result;
    }
    </script>