转义符号
'hell\'o' //"hell'o"
'abc\\d' //'abc\d'
'a\nb' //
RegExp构造函数
字面量创建
var reg = /abc/ //正则表达式
var str = 'abc'
reg.test(str) //true
构造函数创建
var reg = new RegExp('abc','mgi') //第二个参数为属性
修饰符
//ignoreCase忽视大小写
var reg = /add/i
//全局匹配global
var reg = /ac/g
var str = 'acacac'
str.match(reg) //['ac', 'ac', 'ac'] 如果不写g那就只有['ac']
//多行匹配
var reg = /^a/mg //找以a为开头的
var str = 'ac\na' //\n换行了,所以为两行以a开头的
str.match(reg) //['a', 'a']
基本常用
//方括号
var reg = /[123][234][56]/ 一个[]为一位
var str = '12345'
str.match(reg) //['345']
var reg = /[^2][^5]/g //在这里^是非、除了的意思
str.match(reg) //['12','34']
//圆括号
var reg = /(a|d)/g //a或者d
var str = 'abcd'
str.match(reg) //['a', 'd']
元字符
- \w ➡️ [0-9A-z_]
- \W ➡️ [^\w]
- \d ➡️ [0-9]
- \D ➡️ [^\d]也就是非数字
- \s ➡️ 空白字符 [\t\n\r\e\f]
- \S ➡️ [^\s]
- \b ➡️ 单词边界 'abc bcd' /\bbc/ ➡️ ['bc']
- \B ➡️ 非单词边界
- \t 制表符 tab
- \r 回车符
- \f 换页
- \n 换行
- unicode编码
- . ➡️ 点,匹配单个字符,除了换行和行结束符 [^\r\n]
量词
- \n+ ➡️ {1, }
- \n* ➡️ {0, }
- \n? ➡️ {0,1}
- \n{x} ➡️ x个
- \n{x,y} ➡️ x到y个
- xx$ ➡️ 以xx结尾
- ^xx ➡️ 以xx开头
- ^xx$ ➡️ 只能匹配到xx,开头结尾限死
⬆️会贪婪匹配,如果不想,后面加问号,如/a{1,3}?/,这样只会匹配一个
//匹配首位都是数字的字符
var reg = /^\d[\s\S]*\d$/ //[\s\S]*代表所有字符不限制位数的匹配
var str = '1djjslkdfj2'
str.match(reg) //能匹配到
Reg对象的属性
- reg.global 是否有g标志
- reg.ignoreCase 是否有i标志
- reg.lastIndex 查找游标位置
方法
- reg.test()
- reg.exec() //循环匹配,需要有g标志,不然lastIndex永远是0
反向应用
- \1 ➡️
/(\d)\1/反向引用匹配出来的第一个\d,后面也再次匹配同样的\d;/(\d)\1(\d)\2/不同引用需要不同数字
var reg = /(\d)\1(\d)\2/
var str = '1122'
reg.exec(str) //['1122', '1', '2', index: 0, input: '1122', groups: undefined]
//会匹配出第一个引用跟第二个引用
支持正则表达式的方法
- split
- match
- search
- replace
//aabb变成bbaa
var str = 'aabb'
var reg = /(\w)\1(\w)\2/
str.replace(reg,'$2$2$1$1') //用$符号+数字来引用
或者写函数返回字符串
str.replace(reg, function($,$1,$2){
return $2 + $2 + $1 + $1
})
正向预查,正向断言
var str = 'abaaa'
var reg = /a(?=b)/ //跟着b的
str.match(reg) // ['a', index: 0, input: 'abaaa', groups: undefined]
var reg = /a(?!b)/ //不跟着b的
str.match(reg) //['a', index: 2, input: 'abaaa', groups: undefined]
把1000000变成100.000.000的格式
var str = '10000000'
var reg = /(?=(\B)(\d{3})+$)/g
str.replace(reg, '.')