js实现转义和反转义的方法

JavaScript022

js实现转义和反转义的方法,第1张

/*1.用浏览器内部转换器实现html编码(转义)*/

    htmlEncode : function (html){ 

            //.首先动态创建一个容器标签元素,如DIV 

            var  temp = document.createElement ("div")

            //然后将要转换的字符串设置为这个元素的innerText或者textContent 

            (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html) 

            //最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了 

            var   output = temp.innerHTML

            temp = null    

            return  output

     },

/*2.用浏览器内部转换器实现html解码(反转义)*/

     htmlDecode : function (text){

            //首先动态创建一个容器标签元素,如DIV

            var  temp =  document.createElement("div")

            //.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)

            temp.innerHTML = text

            //最后返回这个元素的innerText或者textContent,即得到经过HTML解码的字符串了。                    var  output = temp.innerText  ||  temp.textContent

            temp =null

            return  output

     },

注:这两种方法都是利用innerHTML会编译字符串来实现转义和反转义

/*3.用正则表达式实现html编码(转义)*/

     htmlEncodeByRegExp : function (str){ 

            var  temp = " "

            if(str.length == 0)

                return " "

            temp = str.replace(/&/g,"&")

            temp = temp.replace(//g,">")

            temp = temp.replace(/\s/g," ")

            temp = temp.replace(/\'/g,"'")

            temp = temp.replace(/\"/g,""")

            return  temp

     },

/*4.用正则表达式实现html解码(反转义)*/

    htmlDecodeByRegExp:function (str){ 

            var  temp = ""

            if (str.length == 0)

               return  " "

            temp = str.replace(/&/g,"&")

            temp = temp.replace(/</g,"<")

            temp = temp.replace(/>/g,">")

            temp = temp.replace(/ /g," ")

            temp = temp.replace(/'/g,"\'")

            temp = temp.replace(/"/g,"\"")

            return temp 

    },

/*5.用正则表达式实现html编码(转义)(另一种写法)*/

        html2Escape : function(sHtml) {

                return   sHtml.replace (/[<>&"]/g,function(c){return{'<':'<','>':'>','&':'&','"':'"'}[c]})

         },

/*6.用正则表达式实现html解码(反转义)(另一种写法)*/

        escape2Html : function (str) {

                var  arrEntities = {'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'}

                return   str.replace(/&(lt|gt|nbsp|amp|quot)/ig,function(all,t){return arrEntities[t]})

        }

原文地址: https://www.cnblogs.com/willingtolove/p/11059325.html

1定义正则表达式

在js中定义正则表达式很简单,有两种方式,一种是通过构造函数,一种是通过//,也就是两个斜杠。

例如

代码如下:

var re =new RegExp("\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}")

使用构造函数定义正则表达式,注意大小写,负责就会不起作用。由于构造函数的参数是一个字符串,也可以是两个斜杠的方式定义,遇到一些特殊字符就需要使用\进行转义

通过双斜杠的方式定义同样的正则表达式

代码如下:

var re =/\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/

代码如下:

var re =new RegExp( /^\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/)

可以和构造函数达到同样的效果,但仔细分析,发现,通过构造函数需要更多的转义字符\

2关于验证的三个正则表达式方法

使用正则表达式的主要有字符串的方法match,正则表达式的方法exec,test

正则表达式方法test测试给定的字符串是否满足正则表达式,返回值是bool类型的,只有真和假,如果只是单纯的判断,不需要其他的处理,可以使用尤其是验证时。

代码如下:

function test(){

var text="index.aspx?test=1&ww=2&www=3"//

var re =/\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/

// var re =new RegExp("\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}")

var result= re.test(text)

if(result)

{

alert("ok")

}else

{

alert("err")

}

}

正则表达式方法exec测试给定的字符串是否满足正则表达式,返回匹配到的字符串,如果没有匹配的则返回null,和test基本一致,如果需要获取匹配的各个子字符串,可以使用下标的方式,把上边的test的例子可以改写如下

代码如下:

function test(){

var text="index.aspx?test=1&ww=2&www=3"

var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/

// var re =new RegExp( "\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}")

var result= re.exec(text)

if(result)

{

alert("ok")

alert(result) // 是?test=1&ww=2&www=3,ww=2&

alert(result[0]+",0")//是?test=1&ww=2&www=3

alert(result[1]+",1")//是ww=2&

}else

{

alert("err")

}

}

match其实是字符串的方法,但参数确是一个正则表达式,把上边的例子改写后,如下

代码如下:

function test(){

var text="index.aspx?test=1&ww=234"//

var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/

// var re2 = "(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}"

var result= text.match(re)

if(result)

{

alert(result)//?test=1&ww=234,test=1&

alert(result[0]+",0")//?test=1&ww=234

alert(result[1]+",1")//test=1&

}else

{

alert("err")

}

}

其实字符串类还有多个函数可以传递正则表达式,split,search,replace等但这些方法已经不适合验证了。

代码如下:

function test(){

var text="index.aspx?test=1&ww=234"//

var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/

// var re2 = "(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}"

var result= text.split(re)

alert(result)

alert(result[0]+",0")

alert(result[1]+",1")

}

3正则表达式式的转义字符

在正则表达式中会经常出现转义字符,例如问号?在正则表达式中有特殊的含义,如果需要匹配问号?就需要转义,使用转义字符反斜杠\

如下两个都是匹配问号开头的一段字符串

代码如下:

function test(){

var text="?test=1&ww=2&www=3"

var re = /^\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/// \?表示配置问号?

// var re =new RegExp( "^\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}")// \\?表示配置问号?

var result= re.exec(text)

if(result)

{

alert("ok")

alert(result)

alert(result[0]+",0")

alert(result[1]+",1")

}else

{

alert("err")

}

}

这个正则可以匹配各种 url,比如当前页面的url https://zhidao.baidu.com/question/876452972714524812.html具体解释:最左最右的 / 先忽略 是正则的界定符,表示正则的开始结束(\w+) 表示长度大于1的字符串 (\w的含义自己搜一下): 比较单纯就是表示 :\/\/ 这个表示 // 因为 / 跟上述界定符长得一样会导致程序懵逼,所以前面加了 \ 来转义([\w.]+) 表示长度大于1 由\w和 .(点) 组成的字符串\/ 同上(\S*) 除空白符号之外的的任意字符任意长度用 () 括起来表示要在代码里捕获这里面匹配的内容你问的问题比较基础,建议先自学一下正则。推荐下面的教程 http://deerchao.net/tutorials/regex/regex-1.htm学习正则不要急于求成,耐心看完+多实践