(一)介绍
正则表达式(Regular Expression)简写:RegExp
(二)创建
// 字面量创建
var reg1 = /(a|b|c)/
// 内置构造函数创建
var reg2 = new RegExp('(a|b|c)')
正则表达式是一个复杂数据类型 ( object )
// 字面量创建
var reg1 = /(a|b|c)/
// 内置构造函数创建
var reg2 = new RegExp('(a|b|c)')
console.log(typeof reg1) // object
(三)作用
1. 专门用来验证字符串是否符合规则
语法:正则.test(要检测的字符串)
返回值:true/false
// 字符串中包含 a或b或c
var reg1 = /(a|b|c)/
console.log(reg1.test('abcd')) // true
console.log(reg1.test('hhdh')) // false
2. 从字符串里面获取一些符合规则的内容
语法:正则.exec(要检测的字符串)
(1)字符串中没有符合规则的子字符串 返回null
var reg1 = /(a|b|c)/
console.log(reg1.exec('hhdh')) // null
(2)字符串中有符合规则的子字符串
返回值是一个数组,索引值0是匹配的字符串,只匹配第一个符合条件的字符串
var reg1 = /(a|b|c)/
console.log(reg1.exec('abcd')[0]) // a
(四)元字符
(1)\s 空格
// 只要有一个空格就可以
var reg1 = /\s/
console.log(reg1.test(' abcd')) // true
console.log(reg1.test('abcd ')) // true
console.log(reg1.test('ab cd')) // true
console.log(reg1.test('abcd')) // false
(2)\d 数字 (一个\d只表示一个数字)
// 只要有一个数字就可以 0-9
var reg1 = /\d/
console.log(reg1.test('1abcd')) // true
console.log(reg1.test('abcd')) // false
(3)\D 表示一个非数字
// 只要有一个非数字就OK
var reg1 = /\D/
console.log(reg1.test('1abcd')) // true
console.log(reg1.test('23232323')) // false
(4)\w 数字字母下划线 三种符合一个就可以 任选其一
var reg1 = /\w/
console.log(reg1.test('1abcd')) // true
console.log(reg1.test('%%¥¥&&*')) // false
(5)\W 数字字母下划线 以外的 任意一个都行
var reg1 = /\W/
console.log(reg1.test('1abcd')) // false
console.log(reg1.test('%%¥¥&&*')) // true
(6)\ 转义符
(五)边界元字符
(1)^ 表示字符串需要以什么开始
// 以一个数字开头
var reg1 = /^\d/
console.log(reg1.test('erer')) // false
console.log(reg1.test('2erer')) // true
// 以 a 或者 b 或者 c 开头
var reg2 = /^(a|b|c)/
console.log(reg2.test('erer')) // false
console.log(reg2.test('cdfdf')) // true
(2)$ 表示字符串需要以什么结尾
// 以一个数字开头 同时这个数字也是结尾 也就是只能有一个数字
var reg1 = /^\d$/
console.log(reg1.test('erer')) // false
console.log(reg1.test('2')) // true
// 以 a 或者 b 或者 c开头 以一个数字结尾
var reg2 = /^(a|b|c)\d$/
console.log(reg2.test('a3')) // true
console.log(reg2.test('cdfdf')) // false
(六)限定元字符
(1)* 表示出现 0 - n次
// 出现 0 - n 个数字
var reg1 = /\d*/
console.log(reg1.test('lfff')) // true 0 个数字
console.log(reg1.test('fdf2545dd')) // true 多个数字
// 0-n 个数字开头并且是结尾 也就是说字符串只能是数字 或者空
var reg2 = /^\d*$/
console.log(reg2.test('lfff')) //false
console.log(reg2.test('234343')) // true
console.log(reg2.test('')) // true 0次数字
(2)+ 表示出现 1 - n 次
// 1个或者多个数字
var reg1 = /\d+/
console.log(reg1.test('lfff')) // false
console.log(reg1.test('234343')) // true
// 一次或者多次开头并且结尾 不能是空字符串
var reg2 = /^\d+$/
console.log(reg1.test('')) // false
console.log(reg1.test('234343')) // true
(3)?表示出现 0 - 1次
// 只能有0-1个数字
var reg1 = /^\d?$/
console.log(reg1.test('')) // true
console.log(reg1.test('234343')) // false
console.log(reg1.test('3')) // true
console.log(reg1.test('====')) // false
(4){ n } 指定出现次数
// 出现三次数字 必须
var reg1 = /^\d{3}$/
console.log(reg1.test('')) // false
console.log(reg1.test('234')) // true
console.log(reg1.test('3')) // false
(5){n, } 表示出现 n 次到多次
// 出现3次以上
var reg1 = /^\d{3,}$/
console.log(reg1.test('')) // false
console.log(reg1.test('234445')) // true
console.log(reg1.test('3')) // false
(6){ n, m }表示出现 n 到 m 次
// 3 次到 6次
var reg1 = /^\d{3,6}$/
console.log(reg1.test('2')) // false
console.log(reg1.test('234445')) // true
console.log(reg1.test('2344457')) // false 7次
(七)正则的贪婪和非贪婪
(1)贪婪,按满足条件的最大长度去捕获
// 捕获一个至多个数字
var reg1 = /\d+/
console.log(reg1.exec('sd2')[0]) // 2
console.log(reg1.exec('dsd234445dsd')[0]) // 234445
console.log(reg1.exec('sdsd2344457dsd')[0]) // 2344457
(2)非贪婪,按满足条件的最小长度去捕获 (限定元字符后面加?)
// * (0 至 多个)后面加? 非贪婪,最小的去捕获(0个)
var reg1 = /\d*?/
console.log(reg1.exec('sd2')[0]) // ''
console.log(reg1.exec('dsd234445dsd')[0]) // ''
console.log(reg1.exec('sdsd2344457dsd')[0]) // ''
// + (1 至 多个)后面加? 非贪婪,最小的去捕获(1个)
// 第一个数字
var reg1 = /\d+?/
console.log(reg1.exec('sd2')[0]) // 2
console.log(reg1.exec('dsd234445dsd')[0]) // 2
console.log(reg1.exec('sdsd2344457dsd')[0]) // 2
// ? (0 至 1个)后面加? 非贪婪,最小的去捕获(0个)
// 第一个数字
var reg1 = /\d??/
console.log(reg1.exec('sd2')[0]) // ''
console.log(reg1.exec('dsd234445dsd')[0]) // ''
console.log(reg1.exec('sdsd2344457dsd')[0]) // ''
// {3, } (3 至 多个)后面加? 非贪婪,最小的去捕获(3个)
// 第一个数字
var reg1 = /\d{3,}?/
console.log(reg1.exec('dsd234445dsd')[0]) // 234
console.log(reg1.exec('sdsd2344457dsd')[0]) // 234
// 如果数字少于3个会报错