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));
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的意思
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)); 这个算是对的
str="%25E6%2597%25A5%25E6%259C%25AC";
reg=/%[\da-z]{4}/ig;
alert( reg.test(str) )
var reg=/^(%[\da-fA-F]{4})+$/;
alert(reg.test(a));
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的意思
var reg=/^(%[\da-fA-F]{4})+$/;
alert(reg.test(a));
这个算是对的
呵呵 不是这个意思 我的是 把中文 encodeURIComponent 两次后的字符 现在要对这样的字符找一个表达式来匹配 因为字符不限 所以编码后的长度也不一样
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));
也让我很受教育:编码不难,搞懂需求难啊。
不废话了。
请问你的问题是这样吗?
在一个字符串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>
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";(所以本人觉得楼主编码两次意义不大,不知道有什么特殊目的)
这样本来不会出错,但有时浏览器(火狐)会出现乱码 所以改成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现在就是要匹配 这个编码后的地址