继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

正则,捕获,匹配,元字符和修饰符,?的5个作用,

欧米雪儿lyy
关注TA
已关注
手记 33
粉丝 64
获赞 315
?的5个作用:
?在量词的后面表示取消匹配贪婪模式;\d+?
 ? 如果出现在非量词后面表示0-1次;如\d?
 ?: 只匹配不捕获;
 ?!负向预查;
 ?=正向预查;
正则:
(1)用来处理字符串的规则;只能处理字符串;
    验证当前的字符串是否符合规则   --匹配(test)
    把字符串中符合规则的字符串捕获 -- 捕获(exec)
    匹配: reg.test(str)    捕获: reg.exec(str)  str.match(reg) ;                 str.replace(reg,function)  str.split(reg);

(2)正则元字符和修饰符:
    一个正则就是由元字符和修饰符组成的;

    修饰符: g m i;
      i:忽略大小写,m:多行匹配换行匹配,g:全局匹配(global);
      放的位置:
        var reg = /\d/img; 字面量:两个//之间包含的都是元字符
        var reg = new RegExp('元字符','img');

元字符:-----------------------------------------------

(1)特殊元字符:特殊意义的;
\:转义字符,把普通元字符转化为特殊的意义,或者把特殊元字符转化为普通的意义;
例如:/\d/: 普通元字符d转化为特殊的意义\d; /\./:把特殊元字符 \. 转化为普通 .;
^: 已某一个元字符开始,/^1/:代表匹配当前的字符串以1开头,
$:已某一个元字符结束,/2$/:代表匹配当前的字符串以2结尾,
\d:代表一个0-9的数字;
\D:代码一个非0-9之间的任何字符;
\w: 0-9-a-z-A-Z_;
\W:除0-9-a-z-A-Z_之外的字符;
\n:匹配换行符
\b:匹配边界符;
\s:匹配空白字符;
. :除了\n以外的任意字符;
x| y:x或者y的一个字符;
():分组,第一个作用:改变优先级,优先级最高;
    第二个作用:分组引用;\1,\2...反向引用,\1是第一个分组的内容.....
    第三个作用:分组捕获;

[a-z]: 匹配a-z中的任意一个字符;
[^a-z]:匹配除a-z中的任意一个字符;
[xyz]:或者x,y,z三者中的任意一个;[^xyz]
?!:正向预查
?=负向预查
?:只匹配不捕获;

【】中括号的细节问题:
1.[]中出现的多位数,只能是任意一位数字;[123];匹配1,或者2,或者3,其中的任何一个
2.[]中出现的元字符一般都是自己本身的意思(即使具备特殊的意思,很多元字符自动变成本身的意思),
reg = /*+-?\d./;除了\d代表一个数字之外,*+-?. 都代表本身的意思;

| 小括号的一些作用细节:
reg = /^18|19$/;

(2)量词元字符:代表出现多少次的元字符
*:前面的元字符出现0到多次
+:前面的元字符出现1到多次
?:前面的元字符出现0到1次
{n}:出现n次
{n,}:出现n到多次
{n,m}:出现n到m次;
普通元字符:代表本身的;

//匹配手机号正则
reg = /^1\d{10}$/;
reg = /^[16-85]$/;匹配 1,6-8,5
//匹配年龄 18-65; 18-19,20-59,60-65 分为3段;
reg = /^(?:(?:18|19) | (?:[2-5]\d) | (?:6[0-5]))$/;
//验证中文只能是中文
第一个汉字ASII码:\u4E00
最后一个汉字ASII码:\u9FA5;
reg = /^[\u4E00-\u9FA5](•[\u4E00-\u9FA5])?$/

// 验证有效数字;
reg = /^-?(\d|[1-9]\d+)(\.\d+)?/;
// 验证身份证号;
reg = /^\d{17}(\d|X)$/;

正则的捕获:
exec:可以实现正则的捕获,每一次执行exec只能捕获到一个匹配的结果,是一个数组,
第一个参数:是捕获到的字符串,
第二个参数是:当前捕获字符串当前的索引;
第三个参数:当前匹配的字符串;
exec多次匹配捕获都是一样的结果;exec中有一个lastIndex属性,下一个捕获开始位置的索引;解决正则的懒惰性,执行exec后,让lastindex的值变成为当前开始查找的的位置,我们只需要在正则中加 g 全局修饰符,就可以在执行exec后,就可以修改lastindex;

字符串中有一个match方法,将匹配到的结果全部匹配到,前提reg必须要加g;
match() 方法的弊端:
(1)无法捕获到分组的里面的内容,reg加g
(2)如果不加 reg 不加g,效果和exec效果一样;

我们的match方法和exec方法使用区别:
match方法正则中没有分组,正则加g全局匹配,可以一次全部捕获到;
        如果不加g,捕获和exec捕获到的结果一样;
exec:加上g不会全部捕获,我们需要遍历才能得到;但是可以捕获到分组,
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP