正则,捕获,匹配,元字符和修饰符,?的5个作用,
标签:
JavaScript
?的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不会全部捕获,我们需要遍历才能得到;但是可以捕获到分组,
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦