认识正则表达式 - RegExp
JS 中的数据类型, 是一个复杂数据类型
作用: 专门用来验证字符串是否符合规则
1.如何创建一个正则表达式
1.1 字面量方式创建
语法: var reg = /abcd/
意思: 当你使用这个 reg 正则去验证字符串的时候, 要求字符串中必须包含 abcd 这个字符片段
验证: 'hjdasghjdabcdsdjgsahgdj' true
验证: 'sadadfbasdadcasdasdd' false
var reg = /abcd/
console.log(reg.test('hjdasghjdabcdsdjgsahgdj'));
console.log(reg.test('sadadfbasdadcasdasdd'));
1.2. 内置构造函数创建
语法: var reg = new RegExp('abcd');
var reg = new RegExp('abcd')
console.log(reg.test('hjdasghjdabcdsdjgsahgdj'));
console.log(reg.test('sadadfbasdadcasdasdd'));
结果也是和字面量方式创建的一样
2 正则表达式的常用方法
2.1 test() 匹配
=> 语法: 正则表达式.test('要检测的字符串')
=> 返回值: 一个布尔值
-> 如果该字符串符合正则的规则, 那么就是 true
-> 如果该字符串不符合正则的规则, 那么就是 false
意义: 字符串中必须包含 abcd 字符串片段
var reg = /abcd/
var res = reg.test('1324abcd2345tgfsadygfduih')
console.log(res)
2.2. exec() 捕获
先不做具体了解
3 正则表达式的组成部分
3.1. 元字符
所有的文本内容
特殊符号, 用符号表示一类内容
3. 2 标识符
书写在正则的外面, 用来修饰正则表达式的
4 元字符 — 基本元字符
1. \d 表示 一位 数字
var reg = /\d/
var res = reg.test('wertyuio8kjhbvcoxsdf*&^%$#@#$%^&*(')
console.log(res)
2. \D 表示 一位 非数字
var reg = /\D/
var res = reg.test('12345(67890')
console.log(res)
3. \s 表示 一位 空白内容(空格/缩进/制表符/...)
var reg = /\s/
var res = reg.test('cdrtyu1 ij3456789&^%$#@$%^&')
console.log(res)
4. \S 表示 一位 非空白内容
var reg = /\S/
var res = reg.test(' 1 ')
console.log(res)
5. \w 表示 一位 数字(0-9)字母(a-zA-Z)下划线(_) 中的任意一个
var reg = /\w/
var res = reg.test('!@#$_%^&*(')
console.log(res)
6. \W 表示 一位 非数字字母下划线 中的任意一个
var reg = /\W/
var res = reg.test('1234567890%asdfghjkl_______')
console.log(res)
7. . 表示 一位 非换行以外的任意内容
var reg = /./
var res = reg.test(' \n')
console.log(res)
8. \ 表示 转义符
-> 把有意义的符号转换成没有意义的普通文本
-> 把没有意义的文本转换成有意义的符号
var reg = /\d\.\d/
var res = reg.test('1.5')
console.log(res)
var reg = /\d.\d/
var res = reg.test('1.5')
console.log(res)
5元字符 — 边界符号
1. ^ 表示 字符串 开始
var reg1 = /\d/
var reg2 = /^\d/
console.log(reg1, 'ab1cd', reg1.test('ab1cd'))
console.log(reg2, '1abcd', reg2.test('1abcd'))
2. $ 表示 字符串 结尾
var reg1 = /\d/
var reg2 = /\d$/
console.log(reg1, 'ab1cd', reg1.test('ab1cd'))
console.log(reg2, 'abcd1', reg2.test('abcd1'))
注意: 当 ^ 和 $ 一起使用的时候, 表示的是从开头到结尾
var reg = /^\d$/
console.log(reg.test('1'))
console.log(reg.test('1a2'))
console.log(reg.test('12'))
6 元字符 — 限定符
注意: 一个限定符只能修饰符号前面的一个内容的出现次数
1. * 表示出现 0 ~ 多次
var reg = /^\d*$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
2. + 表示出现 1 ~ 多次
var reg = /^\d+$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
3. ? 表示出现 0 ~ 1 次
var reg = /^\d?$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
4. {n} 表示出现 指定 多少次
var reg = /^\d{2}$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
5. {n,} 表示出现 至少 多少次
=> {0,} 等价于 *
=> {1,} 等价于 +
var reg = /^\d{2,}$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
6. {n,m} 表示出现 n ~ m 次
=> {0,1} 等价于 ?
var reg = /^\d{2,5}$/
console.log(reg.test(''))
console.log(reg.test('1'))
console.log(reg.test('12'))
console.log(reg.test('123'))
console.log(reg.test('1234'))
console.log(reg.test('12345'))
console.log(reg.test('123456'))
var reg = /^a{2}b{2}c{2}$/
console.log(reg.test('aabbcc'))
console.log(reg.test('abcc'))
console.log(reg.test('abcabc'))
7元字符 — 特殊符号
1. ()
=> 意义1: 一个整体
var reg = /^(abc){2}$/
console.log(reg.test('abcabc'))
2. |
=> 意义: 或者的意思
=> 注意: 或的边界, 要么是 (), 要么就到正则的边界
var reg = /^a(b|c)d$/
console.log(reg.test('abd'))
console.log(reg.test('acd'))
console.log(reg.test('abcd'))
var reg = /^ab|cd$/
console.log(reg.test('abcd'))
console.log(reg.test('ababc'))
console.log(reg.test('1234cd'))
console.log(reg.test('ab'))
console.log(reg.test('cd'))
3. []
=> 意义: 包含
=> 注意: 一个 [] 内可以写多个内容, 但是一个 [] 只占一个字符位置, 表示 [] 内的任意一个都行
=> [0-9] 等价于 \d
=> [0-9a-zA-Z_] 等价于 \w
var reg = /^[abcd]$/
console.log(reg.test('a'))
console.log(reg.test('b'))
console.log(reg.test('c'))
console.log(reg.test('d'))
4. [^]
=> 意义: 非
=> 注意: 一个 [^] 内可以写多个内容, 但是一个 [^] 只占一个字符位置, 表示 [^] 内的任意一个都不行
=> [^0-9] 等价于 \D
=> [^0-9a-zA-Z_] 等价于 \W
var reg = /^[^abcd]$/
console.log(reg.test('a'))
console.log(reg.test('b'))
console.log(reg.test('c'))
console.log(reg.test('d'))
console.log(reg.test(' '))
console.log(reg.test('1'))
5. - 中划线
=> 意义: 到 至
=> 注意: 需要和 [] 或者 [^] 连用
=> 注意: 需要 ASCII 编码连着的才可以使用
var reg = /^[0-9]$/
console.log(reg.test('0'))
console.log(reg.test('1'))
console.log(reg.test('2'))
console.log(reg.test('3'))
console.log(reg.test('4'))
console.log(reg.test('5'))
console.log(reg.test('6'))
console.log(reg.test('7'))
console.log(reg.test('8'))
console.log(reg.test('9'))
var reg = /^(abc|def){2}$/
console.log(reg.test('abcabc'))
console.log(reg.test('abcdef'))
console.log(reg.test('defabc'))
console.log(reg.test('defdef'))
8 标识符
标识符
+ 书写在正则表达式的外面, 专门用来修饰整个正则表达式的符号
1. i (ignore)
=> 表示忽略大小写不计
var reg = /abcd/i
console.log(reg.test('abcd'))
console.log(reg.test('ABCD'))
2. g (global)
=> 全局 先不做了解 ()