日期:2014-05-16  浏览次数:20407 次

正则居然能把数字转换成字母?
<script   language=javascript>
function   ReplaceDemo()  
{  
var   r,   re;  

var   s=   "\74\123\103\122\111\120\141\126 ";
re   =   /(\S+)(\s+)(\S+)/g;  
r   =   s.replace(re,   "$3$2$1 ");    
return(r);  
}  
//alert   (ReplaceDemo());
</script>
为什么用正则之后,这里的\74\123\103\122\111\120\141\126变成了“ <SCRIPaV”
请问这个是通过什么转换的?这里的数字是什么编码啊?
哪位大侠能提供一下把HTML都转化为这样数字的JAVASCRIPT函数么?

------解决方案--------------------
八进制
alert( "\74\123\103\122\111\120\141\126 ");

十六进制
alert( "\x3C\x53\x43\x52\x49\x50\x61\x56 ");

UNICODE
alert( "\u003C\u0053\u0043\u0052\u0049\u0050\u0061\u0056 ");


跟正则没有什么关系,在这个例子中,正则没有做任何替换操作
------解决方案--------------------
SORRY!没仔细看是八进制,我写的一个函数,只可以做参考,有可能有BUG
<script language= "JScript ">
//alert(parseInt( "C ",2))
function show(str)
{
var tempstr=escape(str).replace(/%/g, ' ');
var result=0;
var strStatic= "0123456789ABCDEF "
for(var i=0;i <tempstr.length;i++)
{
var strEach=tempstr.charAt(i);
result=parseInt(result)+strStatic.indexOf(strEach)*Math.pow(16,tempstr.length-i-1);
}
return result.toString(8)
}
alert(show( " < "))

</script>
------解决方案--------------------
刚才时间比较紧,现在又完善了下
<script language= "JScript ">
function show(str)
{
var result= " ";
var strStatic= "0123456789ABCDEF "
for(var k=0;k <str.length;k++)
{
if(escape(str.charAt(k)).indexOf( '% ')!=-1)
{
tempstr=escape(str.charAt(k)).replace(/%/, ' ')
var resultEach=0;
for(var i=0;i <tempstr.length;i++)
{
var strEach=tempstr.charAt(i);
resultEach=parseInt(resultEach)+strStatic.indexOf(strEach)*Math.pow(16,tempstr.length-i-1);
}
result+= "\\ "+resultEach.toString(8)
}
else
{
result+= "\\ "+str.charCodeAt(k).toString(8)
}
}
return result
}
alert(show( " <SCRIPaV "))
</script>