1.正则表达式基本概念
所谓正则表达式就是用某种模式去匹配一类字符串的一个公式,反应到js中就是一个RegExp对象。
RegExp 对象:表示正则表达式,它是对字符串执行模式匹配的强大工具。
2.快速入门案例
给你一个字符串(或一篇文章),请你找出所有四个数字连在一起的字串?
代码:
<html>
<head>
<link rel="stylesheet" type="text/css" href="form.css">
<script type="text/javascript">
function test1(){
//得到用户的内容
var con=content.value;
//window.alert(con);
var myReg=/(\d){4}/gi;//这是一个正则表达式对象,可以检索四个连续的数字
//var myReg=new RegExp("(\\d){4}","gi");
while(res=myReg.exec(con)){ //res是检索处理的结果,但是一个结果就对应一个数组,该数组的res[0]就是找到的文本
window.alert("找到"+res[0]);
}
}
</script>
</head>
<body>
<textarea id="content" rows="10" cols="20"></textarea>
<input type="button" onclick="test1()" value="测试"/>
</body>
</html>
小结:
创建一个RegExp对象有两种方法
(1)隐式创建 var reg=/正则表达式/gi [g表示全局匹配,i表示区分大小写]
(2)显示创建 var reg=new RegExp(“正则表达式”,“gi”);
3.String对象和正则表达式相关的方法
(1)test
(2)match
(3)replace
(4)split
//match
function test2(){
var con=content.value;
var myreg=/abc/gi;
res=con.match(myreg);
for(var i=0;i<res.length;i++){
window.alert(i+" "+res[0]);
}
}
//test
function test1(){
var con=content.value;
var myreg=/abc/gi;
if(myreg.test(con)){
window.alert("有abc");
}else{
window.alert("没有abc");
}
}
//replace函数
function test3(){
var con=content.value;
var myReg=/(\d){4}/gi;
//把四个数,换成
var newCon=con.replace(myReg,"这里原来是四个数");
content.value=newCon;
}
4.子表达式和捕获,反向引用的概念
案例:找到第一位与第四位相同,第二位和第三位相同的数
function test5(){
var con=content.value;
//找abba型数字
//var myReg=/(\d)(\d)\2\1/gi;//(\d)第一个字表达式,(\d)第二个子表达式,\2(\1)反向引用第二个(第一个)子表达式的内容
//找aabbccdd型数字
//var myReg2=/(\d)\1(\d)\2(\d)\3(\d)\4/gi;
//找12321-333999111型的数字,要求满足前面是一个五位数,然后一个-号,然后是一个九位数,连续的每三位要相同
var myReg3=/(\d){5}-(\d)\2\2(\d)\3\3(\d)\4\4/gi;
while(res=myReg.exec(con)){
window.alert(res[0]);
}
}
5.元字符
(1)限定符:用于指定其前面的字符和组合项连续出现多少次
function test6(){
var con=content.value;
//找到三个1的组合
//var myReg=/1{3}/gi;
//找到最少三个1最多四个1的组合
//var myReg=/1{3,4}/gi;
//+表示1出现1次到任意多次
//var myReg=/1+/gi;
//?表示1出现0次到1次
var myReg=/a1?/gi;
while(res=myReg.exec(con)){
window.alert(res[0]);
}
}
(2)字符匹配符
\d:表示可以匹配0-9的任意一个数字
\D:表示可以匹配不是0-9中的任意一个数字
\w:匹配任意英文字符、数字和下划线
\W:与\w相反
等等还有很多可以查手册。
(3)定位符:规定要匹配的字符串出现的位置
^:匹配目标字符串的开始位置
$:匹配目标字符串的结束位置
(4)选择匹配符
var myReg=/(han|汉)/gi;
6.综合案例
验证电子邮件格式是否合法:
(1)只能有一个@
(2)@前面是用户名,可以是a-z A-Z 0-9 _-字符
(3)@后面是域名,例如sohu.com并且域名只能是英文字母
//验证输入的字符串是不是一个电子邮件
function test7(){
var con=content.value;
var myReg=/^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/gi;
if(myReg.test(con)){
window.alert("是邮件");
}else{
window.alert("不是邮件");
}
//while(res=myReg.exec(con)){
// window.alert(res[0]);
//}
}