书写形式
new RegExp(正在表达式, 匹配模式)
const reg = new RegExp('a', 'i')
/正在表达式/匹配模式
const reg = /a/i
reg.test('asd')
匹配模式
i 忽略大小写
g 全局匹配
ig 或者 gi
正则
a|b、[ab] // a或b
abc|asd // abc或者asd
[a-z] // 小写a到z
[A-Z] // 大写A到Z
[0-9] // 0到9
[^0-9] // 除了数字
/aaaaaa/、/a{6}/ // {n}出现n次、{m,n}m次到n次、{m,}m次以上
/ababab/、/(ab){3}/
/asd+/ // + 至少一次,相当于/asd{1,}/
/(asd)+/ // 相当于/(asd){1,}/
/as*d/ // * 有没有都可以,相当于/as{0,}d/
/as?d/ // ? 0个或1个,相当于/as{0,1}d/
/^a/ // 以a开头
/a$/ // 以a结尾
/./ // .点表示任意字符
/\./、/\\/ // 单纯的点和\需要转义字符
/\./ => new RegExp('\\.')
/\\/ => new RegExp('\\\\')
/\w/ // \w任意字母、数字、_ 相当于[A-Za-z0-9_]
/\W/ // \W除了字母、数字、_ 相当于[^A-Za-z0-9_]
/\d/ // \d任意的数字 相当于[0-9]
/\D/ // \D除了数字 相当于[^0-9]
/\s/ // \s空格
/\S/ // \S除了空格
/\bchild\b/ // \b单词边界
/\Bchild\B/ // \B除了单词边界
exec方法
获取字符串中符合正则表达式的内容,返回一个数组或者null
const reg = /a[a-z]c/g
let result = reg.exec('abcaccadcaec')
while(result) {
console.log(result)
result = reg.exec('abcaccadcaec')
}
['abc', index: 0, input: 'abcaccadcaec', groups: undefined]
['acc', index: 3, input: 'abcaccadcaec', groups: undefined]
['adc', index: 6, input: 'abcaccadcaec', groups: undefined]
['aec', index: 9, input: 'abcaccadcaec', groups: undefined]
const reg = /a(([a-z])c)/g
let result = reg.exec('abcaccadcaec')
while(result) {
console.log(result)
result = reg.exec('abcaccadcaec')
}
['abc', 'bc', 'b', index: 0, input: 'abcaccadcaec', groups: undefined]
['acc', 'cc', 'c', index: 3, input: 'abcaccadcaec', groups: undefined]
['adc', 'dc', 'd', index: 6, input: 'abcaccadcaec', groups: undefined]
['aec', 'ec', 'e', index: 9, input: 'abcaccadcaec', groups: undefined]
const reg = /a[a-z]c/g
let result = reg.exec('abcaccadcaec')
const fallback = []
while(result) {
fallback.push(result[0])
result = reg.exec('abcaccadcaec')
}
console.log(fallback)
['abc', 'acc', 'adc', 'aec']
split
字符串.split(正则表达式),返回一个数组
var str = "孙悟空abc猪八戒adc沙和尚"
var result = str.split(/[a-z]+/)
console.log(result)
['孙悟空', '猪八戒', '沙和尚']
search
字符串.search(正则表达式),返回一个数字
var str = "孙悟空abc猪八戒adc沙和尚"
var result = str.search(/[a-z]+/)
console.log(result)
3
replace
字符串.replace(正则表达式, 替换成什么内容),返回字符串
var str = "孙悟空abc猪八戒adc沙和尚"
var result = str.replace(/[a-z]+/g, 'xxx')
console.log(result) // '孙悟空xxx猪八戒xxx沙和尚'
const _name = "./login.js".replace(/^\.\/(.*)\.\w+$/, "$1");
const _phone = "19922220792".replace(/^(\d{3})\d{4}(\d{4})$/, `$1${"*".repeat(4)}$2`);
console.log(_name); // login
console.log(_phone); // 199****0792
match
字符串.match(正则表达式),返回一个数组或者null
var str = "孙悟空abc猪八戒adc沙和尚"
var reault = str.match(/[a-z]+/g)
console.log(result)
['abc', 'adc']
matchAll
字符串.matchAll(/正则表达式/g),返回一个迭代器RegExpStringIterator {}
注意:正则表达式必须加全局g,不然报错
var str = "孙悟空abc猪八戒adc沙和尚"
var arr = str.matchAll(/[a-z]+/g)
注意:迭代器,一般用for of 来看里面的值
for(let item of arr) {
console.log(item)
}
['abc', index: 3, input: '孙悟空abc猪八戒adc沙和尚', groups: undefined]
['adc', index: 9, input: '孙悟空abc猪八戒adc沙和尚', groups: undefined]
var str = "孙悟空abc猪八戒adc沙和尚"
var arr = str.matchAll(/([a-z])+/g)
for(let item of arr) {
console.log(item)
}
['abc', 'c', index: 3, input: '孙悟空abc猪八戒adc沙和尚', groups: undefined]
['adc', 'c', index: 9, input: '孙悟空abc猪八戒adc沙和尚', groups: undefined]
// mathAll和exec方法相似
常用正则表达式
去掉开头和结尾的空格
// 开头
/^\s*/
// 结尾
/\s*$/
// 开头和结尾
/^\s*|\s*$/g
手机号
/^1[3-9][0-9]{9}$/
邮箱
/^([A-z0-9_\-\.])+@([A-z0-9])+\.([A-z]{2,4})$/
小数
/^[-+]?\d+\.\d+$/
整数
/^\d+$/