1.正则只能用来处理字符串,.处理一般包含两个方面
①:验证当前字符串是否符合某个规则(正则匹配)
②:获取到一个字符串中符合某种规则的字符(正则捕获)
2.创建正则的两种方式
let reg1=/^\d+$/g
let reg2=new RegExp("^\\d+","g")
3.正则组成
常用的修饰符:
i:忽略大小写
m:多行匹配
g:全局匹配
常用的元字符:
特殊元字符:
\d:0-9之间的一个数字字符
\D:非0-9之间的一个字符
\w:数字字母下划线中的任意一个
\W:非数字字母下划线
\s:任意一个空白字符
\S:任意一个非空白字符
\b:字母边界符
\n:匹配一个换行符
\:转义符,(把一个普通字符转义为一个特殊含义的字符,也可以用来把有特殊含义的字符转为普通字符)
.:除了\n以外的任意字符
^:以其开头
$:以其结尾
|:或 =》x|y =》x或者y中的一个
[]:选中 =》 [abd] =>a,b,d中的任意一个字符
[^]:非选中 =》[^abd] =>非a,b,d中的一个
[a-z]:小a到小z中的一个字符
[^a-z]:非小a到小z中的一个字符
():正则分组
(?:):当前分组只匹配不捕获
(?=):正向预查
/2019(?=-1)/ => 正向预查,匹配出2019后还会看2019后面是不是跟着的-1,是才符合
"2019-1-5" => true
"20195858" => false
"2019-2-5" => false
(?!):负向预查
/2019(?!-1)/ => 负向预查,匹配出2019后还会看2019后面是不是跟着的-1,不是才符合
"2019-1-5" => false
"20195858" => true
"2019-2-5" => true
量词元字符:(让其左边的元字符出现多少次)
*:出现0次或者多次
+:出现1次或者多次
?:出现0次或者1次
{n}:出现n次
{n,}:出现n次或者多次
{n,m}:出现最少n次最多m次
4.[]的一些细节:
[]中出现的一般元字符都只代表其本身 => /^[.]$/ =>匹配的仅仅是.这个字符,而不是元字符.代表的意义
[]中出现的两位数并不是两位数,而是代表两个数字中的任意一个 => /^[18]$/ =>只能匹配1或者8,匹配不了18
[12-65] => 这不是匹配12-65之间的一个字符,而是匹配1,2到6,5中的一个,[]中不存在两位数
5.()分组的作用
1.改变默认优先级
/^18|19$/ => 这不是匹配18或者19而是以18开头或者以19结尾,/^(18|19)$/ =>这才是匹配18或者19
2.分组捕获
exec():正则中的捕获方法
1.如果可以匹配返回一个数组,不可以匹配返回null
2.如果匹配的时候想获取大正则中的部分信息,可以将这一部分使用()包起来,形成一个分组,
这样在捕获 的时候不仅会捕获到大正(整个正则所匹配的),而且还会捕获到(分组捕获)
3.有时候写()并不是为了捕获,只是为了改变优先级或者分组引用,此时我们可以在分组的前面加上"?:",代表
这个分组中的内容只匹配不捕获
let reg=/^(\d{6})(\d{4})(\d{2})(\d{2)\d{2}(\d)(?:\d|X)$/;用来匹配身份证
reg.exec('411522199608242412');
=>["411522199608242412", "411522", "1996", "08", "24", "1" ]
3.分组引用
/^([a-z])([0-9])\2\1$/:这里的括号代表分组,([a-z])就是第一个分组,([0-9])就是第二个分组,\2
意思是和第二个分组一样,\1意为与第一个分组一样,就相当于/^([a-z])([0-9])[0-9])([a-z])$/
6.正则特性
①正则捕获的懒惰性:(加g全局就可去除懒惰性)
使用正则捕获的时候,如果后面不加全局g,那么每一次捕获的时候其起始位置就都是捕获字符串的索引0开始跟字符串的replace替换
方法的第一个参数一样,每一次执行都会从头开始检查,但是如果在后面加一个g全局 那么每一次匹配完正则对象都会记录下来,然后
下一次匹配的时候就会从上次记录位置开始进行捕获,所以如果开了全局g两次捕获不同的字符串,第二次捕获会在第一次捕获记录位置
开始,不过这权限于同一个正则对象来 捕获,记录位置的属性是lastIndex,是正则对象的一个可读写的属性,不加g这个属性的值就没
有影响,始 终是从0开头位置开始匹配捕获,而且不单单是捕获,就是是正则匹配也是有这种懒惰性的,所以加全局g不管时对正则匹配
还是正则捕获都会有影 响,因为全局g会影响正则的lastIndex属性值,而正则每一次进行匹配捕获都会从lastIndex索引值位置处开
始捕获匹配
②.正则捕获的贪婪性:
正则进行捕获的时候,会捕获可能捕获的最大程度来捕获
/(\d{2,3})/ => 如果可以捕获三项就一定不会捕获两项,这就是贪婪性,能捕获更多就绝对不会少捕获
取消贪婪性:在量词后面加上?,=> /(\d+?)/,/(\d{2.3}?)/,这里的?不是量词?,而是贪婪取消符?
7.string的replace替换方法:
实现字符的替换(将字符串中的第一个a字符替换成b字符),注意一次只能替换一个,所以它一般都配合着正则来使用,因为使用
正则会一次替换所有的要替换的字符
replace方法的第二个参数还可以是一个回调函数,如果第二个参数是一个回调函数,那么会默认传入三个实参,
第一个是匹配到的字符(如果正则中有分组捕获,那么则会将分组捕获捕获到的各项逐项当做参数传进函数中,
全部传进去后在传起始匹配位置和原字符串),第二个是匹配到的字符在字符串中的,第三个是原字符串,
每一次函数运行的return返回值会传入字符串匹配项中去替换掉匹配项,如果不返回则使用undefined进行匹配项替换,
如果第一个参数是正则表达式,第二个参数字符串中可以通过$分组索引来引用前面分组中匹配的内容,
$后面的分组索引如果是不存在的,像一共三个分组你整个$4,那这个$4就只能字符串$4(返回新字符串,原字符串不变)
8.string的match方法
匹配一个字符串中匹配正则的部分(原字符串不变,返回符合部分组成数组)
string.match(正则表达式) => 匹配string中符合正则表达式的部分,返回一个所有匹配部分组成的数组
如果正则不匹配则返回null,与正则的exec基本相同
match后面括号中也可以放字符,字符串中如果有这个字符就会返回一个数组,没有这个字符则会返回null,所有也可以用来查找字符串中是否有某字符
正则题录一套:
订单
1.匹配一个电话号码:11位数字,第一位必须是1,最后一位不能是奇数
=> /^[1][0-9]{9}[2468]$/
2.长度为8-10的用户密码(以字母开头、数字、下划线)
=> /^([\w]{8,10})$/
3.匹配18-65
=> /^(1[89])|([2-6]0)|(6[1-5])$/
4.邮箱正则:
=> /^\w+@(163|qq)\.(com|cn|com\.cn)$/
5.姓名正则:
=> /^[\u4e00-\u9fa5]{2,4}$/
6.匹配[Object 任意1-多位的字符]
=> /^\[Object .+\]$/
7.匹配有效数字:
/^[+-]?\d+(\.\d+)?$/
8.连续3个数字
=> /^\d\d\d$/
9.连续2个相同的 数字
=> /([\d])\1/
10.连续3个相同的数字
=> /([\d])\1\1/
11.连续3个或3个以上 相同的 字符
=> /^([\d])\1\1*$/
12.正整数
=> /^[1-9]\d*$/
13.负整数
=> /^-[1-9]\d*$/
14.整 数
=> /^[+-]?\d+$/
15.正浮点数
=> /^\d+\.\d+$/
16.负浮点数
=> /^-\d+\.\d+$/
17.浮点数
=> /^[+-]?\d+\.\d+$/
18.匹配一个字符串中的 正浮点数
=> /[^-]\d+\.\d+/
19.匹配以 `正浮点数` 开头或结尾 的字符串
=> /^[+]?[0-9]+\.[0-9]+|[+]?[0-9]+\.[0-9]+$/
20.只匹配 日期格式:年-月-日 =>/^[\d]{4}-([1-9]|1[012])-([1-9]|[12][\d]|3[01])$/
21.只匹配 日期格式:年-月-日 或 年.月.日 或 年/月/日 =>/^[\d]{4}(-|\.|\/)([1-9]|1[012])(-|\.|\/)([1-9]|[12][\d]|3[01])$/
22.只匹配 中国大陆身份证号,15位或18位
23."<a href='http://hi.baidu.com/mianshiti/blog/category/微软面试题'> 微软面试题 </a>",提取其中的链接地址
=>replace(/.*'(.*)'.*/,function(){
return arguments[1];
})
24."get-element-by-id"写一个正则使其转为驼峰命名"getElementById"
=> replace(/[-]([a-z])([a-z]*)/g,function(){
return arguments[1].toUpperCase()+arguments[2]
})
25.给定字符串 str,检查其是否符合如下格式 1、XXX-XXX-XXXX 2、其中 X 为 Number 类型
=> /[\d]{2}-[\d]{3}-[\d]{4}/
26.给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3
=> /^\$[1-9]{1-3}(,[0-9]{3})*(\.\d{2})*$/
27.获取 url 中的参数
指定参数名称,返回该参数的值 或者 空字符串
不指定参数名称,返回全部的参数对象 或者 {}
如果存在多个同名参数,则返回数组
28.对大串数字进行千分制处理,三位数字用一个','(逗号)隔开
=>replace(/(\d{1-3})(?=(\d{3})+$)/g,function(){
return arguments[1]+",";
}) 、