正则表达式:
定义,一个正则表达式是由普通字符(a~z)以及特殊字符(元字符)组成的模式字符串。来描述查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配
1、字符类(每次只能匹配一个)
[...]例子/[012]/意思是匹配方括号里面的任意一个字符就可以
[^...]例子/[012]/意思是匹配除了方括号里的字符的任意字符
. 匹配除了换行和回车之外的任意字符,相当于[^\r\n]
\d 匹配任意一个数字字符,相当于[0-9] /\d/可以匹配wy3k里的3
\D 匹配任意非数字字符/\D/
\s 匹配任意空白字符,如空格、制表符
\S 匹配任意非空白字符
\w 匹配任何英文字母、数字字符以及下划线
2、量词
? 匹配前一项0次或1次 /JS?/可以匹配JScript中的JS或者JavaScropt中的J
+ 匹配前一项1次或多次,但至少一次 /JS+/ 可以匹配JS也可以是JSSSSSSS
* 匹配前一项0次或多次,也就是任意次
{n} 匹配前一项恰好n次,其中的n次为非负整数/o{2}/比如book里面的两个o或者booook里连续的两个o
{n,}匹配前一项至少n次/o{2}/,至少两个o
{n,m}匹配前一项至少n次至多m次,就是n-m次,在使用的时候数字与逗号之间不能有空格
3、指定匹配位置
^ 起始位置,字符串的行开头,^必须出现在指定字符串的最前面才起作用
/^g/匹配good中的g但不匹配page里的g
$ 匹配字符串的行结尾,$必须出现在指定字符串的最后才起作用/g$/匹配bag中的g但不匹配good的g
\b 匹配单词边界 /e\b/匹配“i love seek”中love的e但不匹配seek里的e
\B 匹配单词的非边界
4、使用选择匹配符
正则表达式选择匹配符只有一个“|”使用它可以匹配指定的多个选择中的任意一项。比如/World|Dream/可以匹配one World one Dream中的World或Dream
5、分组
分组就是使用小括号将多个单独的字符或字符类组合成子表达式,以便可以像处理一个独立的单元那样用|、*、+或者?等来处理他们比如/J(ava)?Script/可以匹配JavaScript也可以匹配JScript
创建正则表达式:
1、通过RegExp类的构造方法创建
语法格式;new RegExp(pattern[,flags])
Pattern:必选,用于指定需要进行匹配的模式字符串
Flags:可选,用于指定正则表达式的标志信息,
g:全局标志,如果设置了该标志,对某个文本执行搜索或替换时将对文本中的所有匹配部分起作用,否则仅搜索或替换第一次匹配的内容。
i:忽略大小写标志。
m:多行标志,如果不设置这个标志,那么^只能匹配字符串的开头,$只能匹配字符串的结尾。
var objExp=new RegExp("\\d",g);//匹配全文中的内容中0-9中的任意一个数字
2、通过正则表达式字面量创建RegExp对象
正则表达式字面量由两条斜线//中间加入模式匹配字符串组成。如果还要指定标识信息,则在最后的斜线/后面加上标志信息,比如g或者i.
var exp=/\d/g;
3、使用test()方法进行模式匹配
Test方法用于对一个指定的自出川执行模式进行匹配,如果搜索到匹配的字符返回true否则返回false;
var exp=/\d/g;
var flag=exp.test("123acb");
alert(flag);
==-------------------------------------
<body>
<form name="form1" method="post" action="">
<input type="text" name="tel" id="tel">
<input type="button" name="check" id="check" value="检测" οnclick="checkTel()";>
</form>
<script>
function checkTel(){
var tel=form1.tel.value;
var exp=/^((\d{3}-)?\d{8})$|^((\d{4}-)?\d{7,8})$/;
if(exp.test(tel)==true){
alert("输入电话号码合法");
}else{
alert("输入电话号码不合法");
}
}
</script>
</body>
Test()方法的局限是只能返回true或false
4、使用exec方法进行模式匹配
Exec方法返回值不是true或false而是当没有搜索到匹配的字符时返回空,否则返回一个数组,这个数组的第一个元素包含与正则表达式相匹配的字符串,其他元素包含的是匹配的各个分组(用括号括起来的子表达式)
语法格式:
regEXP.exec(str)
<body>
<form name="form1" method="post" action="">
请输入电话号码:<input type="text" name="tel" id="tel">
<input type="button" name="check" id="check" value="检测" οnclick="checkTel();">
请输入身份证号:<input type="text" name="idCard" id="idCard">
<input type="button" name="check1" id="check1" value="检测" οnclick="checkIdCard();">
</form>
<script>
function checkTel(){
var tel=form1.tel.value;
var exp=/^((\d{3}-)?\d{8})$|^((\d{4}-)?\d{7,8})$/;
if(exp.test(tel)==true){
alert("输入电话号码合法");
}else{
alert("输入电话号码不合法");
}
}
function checkIdCard(){
var idCard=form1.idCard.value;
var regExp=/(\d{6})(\d{8})(\d{4})/;
var arr=regExp.exec(idCard);
if(arr!=null){
alert("出生日期为:"+arr[2]);//下标为0得到整个匹配结果,为1得到第一个小括号的匹配结果,为2得到第二个小括号匹配结果,为3得到第三个小括号匹配结果
}
else{
alert("输入身份证号不合法");
}
}
</script>
</body>