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”后的
字符看成了一个分组。而该分组时可以被引用的,这种引用被称为“反向引用”,而分组中的表达式也是正则表达式的子表达式,
所以返回的数组中有两个元素。第二个有一个元素。
从