概述
- 正则表达式是一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等
- 使用较少的代码就能完成较复杂的字符串处理工作
定义方式
var re = new RegExp('abc');
var re = /abc/;
(常用写法)
元字符
在正则表达式中具有特殊意义的专用字符,用来代替一个或多个字符
- .
匹配任意字符,除了换行和行结束符
- \w
匹配a~zA~Z0~9字符
- \W
匹配非a~zA~Z0~9字符
- \d
匹配数字
- \D
匹配非数字
- \s
匹配空白字符(\r,\n,空格)
- \S
匹配非空白字符
- \b
匹配单词边界
- \B
匹配非单词边界
- \n
匹配换行符
- \r
匹配回车符
正则方法
test()
检测字符串中是否有正则中需要匹配的子字符串,如果有就返回true,没有则返回false
用法:正则对象.test(str) 如re.test('2');
exec()
不管加不加g,都只匹配一次。但是在有全局匹配的时候,每一次匹配,都是从上一次匹配的结果之后开始进行新的匹配
注:match()/exec()都是返回的数组,如果匹配不到值,返回的都是null
字符串方法
indexOf()
只能查找具体的字符串;可以指定开始查找的位置;查找不到指定字符返回-1search()
可以进行模糊查找(如search(/\d/) search('a')
);只能从字符串开头开始查找,不能指定查找位置match()
将匹配的结果存入到数组中,并返回这个数组(没有g参数:只匹配第一次的结果;有g参数:匹配所有结果)
str.match(/d/gi);
'kflkaujdUUffg*^d'.match(/u/ig)replace()
将匹配的字符替换成其它字符 参数有两个(第一个:用来匹配的正则表达式或字符串;第二个:新的字符串或者返回新字符串的处理函数)
'fdas232#@正则#$@2fdas'.replace(/正则/,'一二三');
split()
用指定字符分割字符串
修饰符
i
:忽略大小写g
:全局匹配m
:匹配多行
语法:/\d/修饰符
量词
n+
匹配任何包含至少一个n的字符串n*
匹配任何包含零个或者多个n的字符串,最少可以没有(空字符串)n?
匹配任何包含零个或一个n的字符串,最多只匹配一个字符n{X}
匹配包含X个n的序列的字符串n{X,Y}
匹配包含X或Y个n的序列的字符串n{X,}
匹配至少X个n的序列的字符串n$
匹配任何结尾为n的字符串^n
匹配任何开头为n的字符串
str.match(/^\d+[a-z]{2}/gm); //匹配以数字开头的字符串,数字个数为1~多个,数字后面带两个字母,匹配多行
- ?= 匹配任何其后紧接指定字符串n的字符串
str.match(/\d(?=a)/g);
- ?!= 匹配任何其后没有紧接指定字符串n的字符串
\1
提取重复的数字,后面提取出的字符与前面提取出的字符是重复的
str.match(/[a-z](\w)\1+/g);
字符类
[abc]
匹配任意一个在[]中存在的字符[a-z]
、[A-Z]
、[0-9]
范围匹配[a-z0-9A-Z]
上述的组合运用a|b
匹配|左边或者右边的字符()
对正则进行分组- 汉字范围:
\u4e00-\u9fa5;
注:一个[]只表示一个字符;表示范围只能是0-9、a-z、A-Z,不能倒序;元字符等特殊含义的字符,如果要使用本来的字符来匹配,需要使用\来取消转义
分组、子项与引用
- 小括号的作用:1、分组:对正则规则进行分组描述;2、作为正则的一个子项
注:正则的子项顺序是按左小括号的顺序来计算的
/(\d)(\w)\2+/g