RegExp对象定义了两个用于模式匹配的方法,它们是exec()和test()。
exec()它对一个制定的字符串执行一个正则表达式匹配,如果没有找到任一个匹配,它将返回NULL,否则返回一个数组,这个数组的第一个元素包含的是与争着表达式相匹配的字符串,余下的所有元素包含的是匹配的各个分组。而且,正则表达式对象的index属性还包含了匹配发生的字符的位置,属性input引用的则是被检索的字符串。
<html>
<head>
<title>Example-10.3 从身份证号码中获取出生年月日</title>
</head>
<body>
<script type="text/JavaScript">
<!--
//从身份证号码中获取出生年月日
str="420105198203091614";
var re=//d{6}([12]/d{3})([01]/d)([0123]/d)/d{4}/;
var id=re.exec(str);
//exec用字符串参数去匹配模式,得到一个数组,第一个元素是匹配的表达式本身
//第二个元素开始是正则表达式中对应的括号(分组)中的匹配项
//即id[1]匹配([12]/d{3})
//id[2]匹配([01]/d)
//id[3]匹配([0123]/d)
document.write("ID为:"+id[0]+"<br/>");
document.write("出生年月为日为:"+id[1]+"-"+id[2]+"-"+id[3]);
-->
</script>
</body>
</html>
test()
<html>
<head>
<title>Example-10.4 使用test()方法遍历字符串</title>
</head>
<body>
<script type="text/JavaScript">
<!--
var str1 = "JavaScript is not Java";
var str2 = "JavaScript is easy and JavaScript is fun. I love JavaScript!";
var exp = /[Jj]ava(Script)?/g; //匹配Java、java、JavaScript、javaScript的正则表达式
var i = 0;
var lastIndex = 0;
while(exp.test(str1))
//用while循环去遍历匹配str1,一共可以找到两个匹配项,一个是JavaScript,一个是Java
{
i++;
lastIndex = exp.lastIndex; //记下最近匹配到的lastIndex
}
//最后循环结束时,exp.lastIndex会自动清零
document.write(i + " matchs, last match index:" + lastIndex + "<br/>");
i = 0;
while(exp.test(str2))
{
i++;
lastIndex = exp.lastIndex; //记下最近匹配到的lastIndex
}
document.write(i + " matchs, last match index:" + lastIndex + "<br/>");
//下面这一句不是必要的,因为循环结束时会自动清零
exp.lastIndex = 0;
-->
</script>
</body>
</html>