创建正则表达式
var reg = /abc/;
var reg = new RegExp('abc');
正则表达式的方法
exec():
reg.exec(str)
其中str为要执行正则表达式 的字符串,该方法会返回一个数组,其中第一位为在str中匹配出的字符串,index为匹配出的字符串首次出现的位置。
test():
reg.test(str)
str同样为要执行正则表达式的字符串,该方法会判断str中是否有符合正则表达式的字符串,如果有返回true,否则返回false。
正则表达式参数
i (ignore) 忽略大小写
g (global) 全局匹配
m (multiline) 多行匹配
表达式
1. [abc]
查找方括号之间的任意字符,匹配的为单个字符,可以为方括号中的任意一个。
方括号中的也可以为一个范围,比如[a-zA-Z0-9],这样代表匹配所有字母以及数字
[^abc]
查找不再方括号范围内的字符,注意^的位置,是在方括号里面,是取反的意思。
2. ()
括号的作用是提高优先级以及产生子表达式
3. |
或表达式,和[]功能差不多,可以配合()来使用
元字符
1. .(点) /./
可以匹配出除了换行符(\n)和行结束符 (\r) 之外的所有字符
2. \w
该元字符可以匹配单词字符,即A-Za-z0-9_
注意:该符号可以匹配下划线
3. \W
匹配除了\w可以匹配的其他字符
4. \d
匹配数字字符,即0-9
5. \D
匹配除了数字字符其他的其他字符
6. \s
匹配空白字符
空白字符包括:空格符、制表符(\t)、回车符(\r),换行符(\n),垂直换行符(\v)、换页符(\f)
7. \S
查找非空白字符,即除了\s包括的空白字符之外的其他字符。
我们如果要匹配任意字符的话,就可以搭配起来使用了:
[\s\S]、[\d\D]、[\w\W]等都可以
8. \b
匹配单词边界, 只有在单词的开头位置才会匹配
9. \B
匹配非单词边界, 匹配非单词边界中的字符
注意: 汉字本身就是一个单词,每个汉字两边默认含有单词边界
量词
以下的n代表一个变量,可以为表达式或者元字符
1. n+
匹配至少一个变量n
2. n*
匹配至少0个变量n
3. n?
匹配0-1个变量n
4. n{x}
规定匹配x个变量n,大括号可以为一个区间,使用,隔开,比如{1,4}匹配1-4个,如果区间不写第二个则可以无限匹配,这里默认为贪婪匹配,尽可能多的匹配。
如果{}?,在大括号后面添加一个?则变为最小匹配,
5. n$
匹配以n结尾的字符
6. ^n
匹配以n开头的字符
注: 小括号可以作为子表达式来引用
例:匹配xxxx
/(\w)\1\1\1|(\W)\2\2\2/
其中()内为子表达式,\1为反向引用一次第一个子表达式,如需多次引用则添加多个,其中1代表第一个子表达式,以此类推第二个为2。
字符串常用方法
str.replace()
第一个参数为正则表达式,第二个参数为要替换的内容
例:将形如xxyy的内容进行反转替换成为yyxx
let reg = /(\w)\1(\w)\2/
let str = 'aacc'
str.replace(reg, $2$2$1$1)
这里replace的第二个参数也可以反向引用正则表达式的子表达式内容,使用$来引用,也可以为一个函数
str.replace(reg, function ($, $1, $2) { return $2+$2+$1+$1 })
正向预查:?=n ?!n为反向,即不为n
例: 找出后面是b的a(这里b作为判断条件,但实际上查的为a)
let reg = /a(?=b)/
常用正则表达式
1. 取出字符串结尾的数字
const reg = /\d+$/g;
const str = 'ass340';
const number = reg.exec(str)[0]; //"340"
2.固定电话正则
/\d{3,4}-\d{7,8}(-\d{3,4})?$/
区号 电话号码 分机号(非必填)
3. 手机号正则
/^(0*|86|17951)?(13\d|15\d|166|17[3678]|18\d|14[57])\d{8}$/
忽略0及86、17951
未完待续,持续更新中。。。