正则表达式

1.正则表达式 使用正则表达式对象其构造函数的语法代码如下所示 var 参数name = new RegExp( pattern, attributes) a.pattern:字符串,既要匹配的正则表达式(不需要使用/); b.attibutes:正则表达式的标志,也就是i,g,或m. 列子如下:

2.测试匹配是否成功 RegExp对象的test()方法。语法代码为;regexp.test(str);如果为真则返回ture否则返回false。

 

a.验证邮政编码的合法性: var myRegExp=/^/d{6}$/;

b.验证身份证号码: var myRegExp = /^/d{17}[/d|x]$|^/d{15}$/i;

c.验证电话号码:由于区号有两种不同的表示方法,因此,可以使用选择符来进行区分,可以使用“/(/d{3,4}/)|/d{3,4}-"来选择使用哪种分隔符。另外,由于区号可以省略,因此,可以使用“()”将其分组,并使用“?”来匹配0次或者1次。 var myRegExp = /^(/(/d{3,4}/)|/d{3,4}-)?/d{7,8}$/;

d.验证邮箱: var myRegExp = /^[/w-_/.]+@([/w-]+/.)+$/

 e.验证URl: var myRegExp = /^http(s)?:([/w-]+/.)+[/w-]+(//[/w-/.///?%&/=]*)?$/;

 

f.匹配中文字符的正则表达式: [/u4e00-/u9fa5]

 

g.匹配双字节字符(包括汉字在内):[^/x00-/xff]

 

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;}

 

h.匹配空行的正则表达式:/n[/s| ]*/r

 

i.匹配HTML标记的正则表达式:/<(.*)>.*<///1>|<(.*) //>/

 

j.匹配首尾空格的正则表达式:(^/s*)|(/s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function()
{
    return this.replace(/(^/s*)|(/s*$)/g, "");
}

 

k.利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

function IP2V(ip)
{
 re=/(/d+)/.(/d+)/.(/d+)/.(/d+)/g  //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
 throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

 

 

3.regexp.exec(str)
其中,regexp为一个正则表达式对象,str为要匹配的字符串。如果exec()方法在字符串中找到了可以
匹配的子字符串,那么该方法将返回一个数组,否则返回null。
例子如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<script  type="text/javascript">
 var str = "Define a Class with a class definition.";
 var myRegExp1 = /defin(/w+)/i;
 var arrExp1 = myRegExp1.exec(str);
 var myRegExp2 = /defin/w+/i;
 var arrExp2 = myRegExp2.exec(str);
 document.write("原字符串为:"+str+"<br>");
 document.write("正则表达式为:"+myRegExp1.source+"<br>");
 document.write("其匹配的字符串为:"+arrExp1+"<br>");
 document.write("正则表达式为:"+myRegExp2.source+"<br>");
 document.write("其匹配的字符串为:"+arrExp2+"<br>");
 
</script>

<body>
 
</body>
</html>

该例子结果如下:
原字符串为:Define a Class with a class definition.
正则表达式为:defin(/w+)
其匹配的字符串为:Define,e
正则表达式为:defin/w+
其匹配的字符串为:Define


从理论上说,这两个表示式都可以完整匹配的字符串都是相同的,即可以匹配以“defin”开头的,
后面可以是一个或多个字符([a-zA-Z0-9]).由于没有g标签,所以在第一次成功匹配后,就会停止匹配
,因此得到结果为Define。
对于第一个正则表达式而言,使用了()分组符将完全匹配的字符串“Define”中的“Ddfin”后的
字符看成了一个分组。而该分组时可以被引用的,这种引用被称为“反向引用”,而分组中的表达式也是正则表达式的子表达式,
所以返回的数组中有两个元素。第二个有一个元素。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值