概述
一.理论讲解部分:
1.创建RegExp对象的方法
(1)隐式创建:/pattern/[flag]
说明:pattern是必须的,flag是可以选择的
flag主要有以下几种标识符
g 全局标识符
i 忽略大小写
m 用作多行标志
2.RegExp对象属性:
(1)index:当前表达式模式首次匹配内容开始位置,从0开始计数,其初始值是-1,每次匹配成功时,index属性都会随之改变
(2)lastindex:是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数
(3)input:返回当前所作用的字符串
(4)leftContext:是当前表达式模式下最后一个匹配字符串左边的所有内容
(5)rightContext:是当前表达式模式下最后一个匹配字符串右边的所有内容
3.子表达式,捕获,反向引用
引用实际例子:
[1].reg=(d)(d)(2)(1);//其中前两个"(d)“表示数字0-9,后面的的第一个”2"表示引用第二个表达式,即引用第二个"(d)",使它的值等于第二个子表达式的值,同理,"1"表示和第一个"(d)“表达式的值相同。
[2]//查找类似于 aabbccdd 的数字
var myReg1=/(d)1(d)2(d)3(d)4/gi;
[3]//查找类似于 12321-333999111 这样的号码,要求满足前面是一个五位数,然后是一个-号然后是一个九位数,连续的每三位要相同
实现方法:
//下面 4 种方法都是可以的
//var myReg2=/(d){5}-(d)22(d)33(d)44/gi;
//var myReg2=/(d){5}(-)(d)33(d)44(d)55/gi;
//var myReg2=/(d){5}(-)((d)44){3}/gi;
var myReg2=/(d){5}-((d)33){3}/gi; //表示只要有连续三组((d)33)满足这种规则的就可以
//注意:这里不是((d)22){3},反向捕获是以左括号为标志的,前面有几个左括号,那么就反向捕获第几个子表达式的内容
4.元字符:限定符
用于指定其前面的字符或者组合连续出现多少次
(1)举例:”{}“的使用:
[1]组合项写法:
var myReg2=/(d){5}-((d)33){3}/gi; //表示只要有连续三组((d)33)满足这种规则的就可以 -->
[2]连续字符写法:
“(d){5}”:表示连续5个数字
(2)贪婪匹配规则:
{n,m}说明:n表示至少出现n次最多出现m次,比如a{3,4},1{4,5};
匹配规则:js在默认匹配中使用的是贪婪匹配规则,即尽可能多的匹配字符串。
(3)元字符-限定符(匹配限定符前面的字符)
[1]”+":表示出现1次或者任意多次
[2]"*":表示出现0次到任意多次
[3]"?“表示出现0次到1次
(4)元字符-字符匹配符
[a-z]表示可以匹配a-z中任意一个字符
[A-Z]表示可以匹配A-Z中任意一个字符
[0-9]表示可以匹配0-9中任意一个字符
[^a-z]表示匹配不是a-z中的任意一个字符
d 表示匹配0-9的任意一个数字,相当于[0-9]
D 表示匹配不是0-9的任意一个数字,相当于[^0-9]
w匹配任意英文字符,数字,下划线,相当于[a-zA-Z0-9_]
W的意义与w做用相反
s匹配任意空白字符(空格,制表符等)
S匹配任意非空白字符,和s作用相反
. 匹配除n以外的左右字符,如果要匹配本身则需要进行转译,写成”."
(5)元字符–转义符号
需要用到的转义字符的符号有:
. * + ( ) $ / ? [ ] ^ { }
(6)元字符-定位符
^ 说明:匹配目标字符串的开始位置
$ 说明:匹配目标字符串的结束位置
二.重要实际例子:
BODY部分:
<textarea id="content" rows="10" cols="20" value="">
</textarea>
<br>
<input type="button" value="反向引用" onclick="test1()"/>
<br>
<input type="button" name="" value="贪婪匹配" onclick="test2()"/>
<br>
<input type="button" name="" value="匹配转译字符下的." onclick="test3()"/>
<br>
<input type="button" name="" value="定位符 ^ $" onclick="test4()"/>
<br>
<input type="button" name="" value="邮箱验证" onclick="test5()"/>
<br>
<input type="button" name="" value="验证是否是电话号码" onclick="test6()"/>
</body>
JS部分:
var content=document.querySelector("#content");
//子表达式,捕获,反向引用的理解:
function test1(){
var con=content.value;
//寻找abba类型的数字的正则规则:
var myReg=/(d)(d)(2)(1)/gi;
//寻找aabbccdd类型的数字的正则规则:
var myReg_1=/(d)1(d)2(d)3(d)4/gi;
//要求满足前面是一个五位数,然后是一个-号然后是一个九位数,连续的每三位要相同
var myReg_2=/^(d){5}-((d)33){3}$/gi;
while(res=myReg.exec(con)){
window.alert(res[0]);
}
}
//贪婪匹配的理解
//实例:"1111111"使用正则表达式"/1{3,4}/gi"来进行匹配,即优先进行长度为4的匹配,然后再次进行3次的匹配即尽可能更多长度的进行匹配
function test2(){
var con=content.value;//
var myReg_4=/1{3,4}/;
while(res=myReg_4.exec(con))
window.alert(res[0]);}
//匹配转译字符下的"."
function test3(){
var con=content.value;//
var myReg_5=/./gi;
while(res=myReg_5.exec(con))
window.alert(res[0]);}
//定位符的匹配:
//举例:使用"^"和"$"的规则建立正则表达式/^han/gi和/han$/gi分别对字符串"hanshunping han han"进行匹配
function test4(){
var con=content.value;//
var myReg_6=/^han/gi;
var myReg_7=/han$/gi;
while(res=myReg_7.exec(con))
window.alert(res[0]);}
//实际应用案例1:
// 验证电子邮箱是否合法:
// 要求:1.只能有一个@
//
2.@前面是用户名,可以是a-z A-Z 0-9 _字符 @后面是域名可以是sohu.com或者tsinghua.org.cn并且域名只能是英文字母 163.com
function test5()
{
var con=content.value;//
var myReg_8=/^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+.)+(com|cn|net)$/gi;
while(myReg_8.exec(con))
{alert("是电子邮箱");}
}
最后
以上就是优雅狗为你收集整理的JS正则表达式--正则表达式(韩顺平版)总结精要的全部内容,希望文章能够帮你解决JS正则表达式--正则表达式(韩顺平版)总结精要所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复