经过两次的Js encodeURIComponent 处理过的汉字 如下%25E6%2597%25A5%25E6%259C%25AC%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF现在有没有一个正则匹配这样经过编码后的 表达式 

解决方案 »

  1.   


    str="%25E6%2597%25A5%25E6%259C%25AC";
    reg=/%[\da-z]{4}/ig;
    alert( reg.test(str) )
      

  2.   

    var a="%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF";
    var reg=/^(%[\da-fA-F]{4})+$/;
    alert(reg.test(a));
      

  3.   


    var str1 = '%25E6%2597%25A5%25E6%259C%25AC' , 
    str2 = '%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF';
    var reg = new RegExp(str1);
    console.log(reg.test(str2));
    console.log(str2.match(reg));你看下上面是不是你要的效果,其实不是很明白LZ的意思
      

  4.   

    var a="%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF";
    var reg=/^(%[\da-fA-F]{4})+$/;
    alert(reg.test(a));
    这个算是对的 
      

  5.   


    呵呵 不是这个意思 我的是 把中文 encodeURIComponent 两次后的字符 现在要对这样的字符找一个表达式来匹配 因为字符不限 所以编码后的长度也不一样 
      

  6.   


    var str1 = '%25E6%2597%25A5%25E6%259C%25AC' , 
    str2 = '%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF';
    console.log(str1.match(/%([\d\w]*)/g));
    console.log(str2.match(/%([\d\w]*)/g));
      

  7.   

    搞懂你的问题本身花的时间多于解决问题的时间,真是蛋疼!提问的时候最好把问题背景陈述一下,有利于问题的理解。
    也让我很受教育:编码不难,搞懂需求难啊。
    不废话了。
    请问你的问题是这样吗?
     在一个字符串s中有你经过两次encodeURIComponent()的汉字字符串,经两次处理后的汉字在
    s中的形式如下%25E6%2597%25A5%25E6%259C%25AC%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF
    (具体长度取决于编码前汉字的长度)
    现在你希望得到s中的汉字部分的字符串,也就是上面形式的字符串。
    如果我对你问题的理解正确,下面是代码(可直接看效果)
    <script>
    var left="\\http:www.baidu.com\page\index.aspx?x=12312&y=asdf",
    right="asd%25E6%2597%25A5%25E6%259C%25AC%25E4%25B8%258D%25E6%2598%25AF%25E4%25B8%259C%25E8%25A5%25BF%25E3%2580%2582"; //测试用
    var a="%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF";var uri=left+a+right;//此处的url模拟你要从中查找汉字子串的母串
    //alert(uri);
    //alert(decodeURIComponent(a));
    //alert(decodeURIComponent(decodeURIComponent(a))); //日本是什么东西    ??????楼主犀利
    //var hZ="日本不是东西。";
    //alert(encodeURIComponent(hZ));
    //alert(encodeURIComponent(encodeURIComponent(hZ)));
    var pattern=/(%25[0-9A-F]{2}){1,}/gm;
    var matches=null;
    var resultList=new Array();
    while(matches=pattern.exec(uri)){
    resultList.push(matches[0]);
    }for(var i=0;i<resultList.length;i++){
    alert(resultList[i]);
    alert(decodeURIComponent(decodeURIComponent(resultList[i])));
    }</script>
      

  8.   

    另外补充一点encodeURIComponent()对汉字字符编码的规律,如下:
    var textHZ="明天星期六?爽!";
    alert(encodeURIComponent(textHZ));
    //结果为:%E6%98%8E%E5%A4%A9%E6%98%9F%E6%9C%9F%E5%85%AD%EF%BC%9F%E7%88%BD%EF%BC%81
    alert(encodeURIComponent(encodeURIComponent(textHZ)));
    //结果为:%25E6%2598%258E%25E5%25A4%25A9%25E6%2598%259F%25E6%259C%259F%25E5%2585%25AD%25EF%25BC%259F%25E7%2588%25BD%25EF%25BC%2581提示:编码一次两次和一次没本质区别只是在%后加了个25.这是因为encodeURIComponent("%")="%25";(所以本人觉得楼主编码两次意义不大,不知道有什么特殊目的)
      

  9.   

    是这样的 我是做一个搜索功能 搜索关键字 经过编码 就出现那样字符 后又要重写URL 所以要用正则来匹配这样的地址  (为了防止乱码出现 后台要接收编码后再处理 前边Js编码 本应该是Js 解码 但后台 就用类似 解码做出来 所以前边两次编码 也是借鉴别人的做法)
      

  10.   

    如www.a.com/a.aspx?Keywords=日本是什么东西
    这样本来不会出错,但有时浏览器(火狐)会出现乱码 所以改成www.a.com/a.aspx?Keywords=%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF
    然后对 这样地址 重写 写成 
     www.a.com/a/日本是什么东西 www.a.com/a/%25E6%2597%25A5%25E6%259C%25AC%25E6%2598%25AF%25E4%25BB%2580%25E4%25B9%2588%25E4%25B8%259C%25E8%25A5%25BF现在就是要匹配 这个编码后的地址