在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")
}
}
/*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
$是需要转义的^也需要转义
*也是
为什么说不需要转义呢?
不转义的话$会被认为成结束标记,^会被认为是开始标记 或 与[]组成不包含标记,*表示成匹配0次或多次。
除非,除非啊,你用的是中文字符^$*。
不信?你自己写个小页面试试