一.正则表达式(规则表达式)
+ 由我们自己书写规则
+ **专门用来检测一个字符串是否符合我书写的标准**
+ 一般都是用在 表单验证 / 从字符串中获取某些内容
二. 创建正则表达式的方式
1. 字面量创建
var reg = /abcd/
2. 内置构造函数创建
var reg = new RegExp('abcd')
正则表达式是一个复杂数据类型
俩个创建方法的区别
1. 字面量直接写
+ 不能进行字符串拼接
2. 内置构造函数的方式
+ 第一个参数是写在正则内部的符号
+ 当你需要写一些正则的元字符的时候
+ 需要写成 \\d
+ 第二个参数是标识符
+ 可以把多个标识符写在一个字符串里面
+ 可以进行字符串拼接
// var reg1 = /abcd/ig
// console.log(reg1)
// 表示我想正则中 填充的内容是一个换行
// var reg2 = new RegExp('\n', 'ig')
// console.log(reg2)
// 表示你向正则中填充了一个 \n => var reg = /\n/
// var reg2 = new RegExp('\\d{2}', 'ig')
// console.log(reg2)
三.正则表达式就是用来检测字符串是不是满足要求的
1. test() 用来检测字符串
语法: 正则表达式.test(字符串)
返回值: 如果字符串满足我写的规则,那么返回 true,否则返回 false
// 需要包含字符 abcd
var reg = /abcd/
var str = 'sfdasfsgefsa bcdasfjifgerjgnen'
// 用刚才的正则取检测 str 这个字符串
var res = reg.test(str)
console.log(res)
四.元字符
1. `.`(点)
+ 非换行的任意字符
2. `\`(斜线)
+ 转译
+ 把有意义的变成没有意义的
+ 把没有意义的变成有意义的
3. \s (space 空格)
+ 空格
4. \S
+ 非空格
5. \d (digit (从0~9的任意一个)数字)
+ 数字
6. \D
+ 非数字
7. \w (word 单词)
+ 数字字母下划线
8. \W
+ 非数字字母下划线
// 表示字符串里面包含着非换行的其他字符都可以
// var reg = /./
// var str = 'a\n'
// var res = reg.test(str)
// console.log(res)
// 表示字符串里面需要包含着一个 . 字符
// var reg = /\./
// var str = 'ab.cd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一个 空格
// var reg = /\s/
// var str = 'abcd s'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一个非空格
// var reg = /\S/
// var str = ' a '
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一个数字
// var reg = /\d/
// var str = 'abcd sferg'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一个非数字
// var reg = /\D/
// var str = '123asdj'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一个 字母也行数字也行下划线也行
// var reg = /\w/
// var str = '@#¥%……&'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出现一个 非数字字母下划线 的内容
var reg = /\W/
var str = 'fegsasd……1231231___'
var res = reg.test(str)
console.log(res)
五.边界符
+ 用来限制正则的边界,也是限制字符串的边界
1. ^
+ 开始
2. $
+ 表示结束
+ 在使用正则的表示表示以什么开头以什么结尾
// 表示字符串需要以 a 开头,a 要和 bcd 连着
// var reg = /^abcd/
// var str = 'abcdkjhklhksadadasad'
// var res = reg.test(str)
// console.log(res)
// 表示字符串需要以 d 结尾, abc 需要连着 d
// var reg = /abcd$/
// var str = 'kjhhlkhhkabcdaskjdhkabcd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串从开头到结尾只能由 abcd 四个字母组成,并且顺序不能变
// var reg = /^abcd$/
// var str = 'abcd'
// var res = reg.test(str)
// console.log(res)
// var reg = /^\d\d\d\d\d$/
// var str = '111456'
// var res = reg.test(str)
// console.log(res)
六.限定符
+ 用来描述每一个正则 元字符 出现的次数
1. +(加号)
表示 1 到 正无穷次
2. *(星号)
表示 0 到 正无穷次
3. ?(问号)
表示 0 或者 1 次
4. {n}
表示 n 次
5. {n,}
表示至少 n 次 {1,}
{1,} 等价于 +
{0,} 等价于 *
6. {n,m}
表示 至少 n 次,至多 m 次
{0,1} 等价于 ?
// 表示字符串只能由 一位以上的数字组成
// var reg = /^\d+$/
// var str = '123454'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出现数字 0 到 正无穷次
// var reg = /\d*/
// var str = 'abcdefg123456'
// var res = reg.test(str)
// console.log(res)
// 字符串只能由 0 到多个数字组成
// var reg = /^\d*$/
// var str = ''
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出现数字 0 次 或者 1 次
// var reg = /\d?/
// var str = 'adasdsd1234'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 0 个 或 1 个数字组成
// var reg = /^\d?$/
// var str = '123'
// var res = reg.test(str)
// console.log(res)
// 表示字符串里面需要包含一个 三个数字连着 的字符片段
// var reg = /\d{3}/
// var str = 'abcdefg123456'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 三位数字 组成
// var reg = /^\d{3}$/
// var str = '12345'
// var res = reg.test(str)
// console.log(res)
// 表示字符串从开头到结尾只能由三位以上的数字组成
// var reg = /^\d{3,}$/
// var str = '12345676889'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 6 ~ 16 位数字组成
var reg = /^\d{6,16}$/
var str = '1234567890123456'
var res = reg.test(str)
console.log(res)
// 在谷歌应用商店搜索 FEHelper
七.特殊符号
1. () 小括号
+ 表示一个集合
+ 在捕获的时候单独捕获(讲方法的时候说)
2. []
+ 表示一个任意选择的集合
+ 出现在中括号内的内容出现任意一个就行
3. [^]
+ 表示一个非任意选择集合
+ 出现在这个符号中的任意一个字符都不能出现
4. |
+ 或
+ || 逻辑或
+ | 占位或
+ 一般和小括号一块使用
5. -(中划线,英文状态的中划线)
+ 到(至)
+ 一般和中括号一起使用
+ 必须是 ASCII 编码挨着的
+ [0-9] 等价于 \d
+ [^0-9] 等价于 \D
+ [0-9a-zA-Z_] 等价于 \w
+ [^0-9a-zA-Z_] 等价于 \W
// 表示字符串从开头到结尾需要 abcdabcd
// var reg = /^(abcd){2}$/
// var str = 'abcdabcd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串从开头到结尾,只能由 a 或者 b 或者 c 或者 d 组成,并且只能出现两次
// var reg = /^[abcd]{2}$/
// var str = 'ad'
// var res = reg.test(str)
// console.log(res)
// 表示这一位字符不能是 a 不能是 b 不能是 c 不能是 d,其他的都行
// var reg = /^[^abcd]$/
// var str = 'e'
// var res = reg.test(str)
// console.log(res)
// 表示这个位置写的内容可以是 163 可以是 162 可以是 sina 可以是 qq
// var reg = /^(163|162|sina|qq)$/
// var str = '163'
// var res = reg.test(str)
// console.log(res)
// var reg = /^[0-9]$/
// var str = 'A'
// var res = reg.test(str)
// console.log(res)
八.正则的方法
1. 一个叫做 匹配
+ 就是检测看看字符串是否符合规则
+ test()
2. 一个叫做 捕获
+ 就是把字符串中符合要求的那一段字符给我单独拿出来
+ exec()
exec
语法: 正则表达式.exec(要捕获的字符串)
返回值: 是一个数组
有一些内容
数组第 0 项 是按照正则要求捕获出来的内容
index: 表示我找到的这个字符片段是从哪一个索引开始的
input: 表示原始字符串
因为正则的懒惰性
捕获完毕以后,下次捕获的时候还是从索引 0 开始查找
当正则有了标识符 g 的时候
会在第二次捕获的时候,从第一次捕获的结尾开始查找
如果没有找到会返回 null
当他返回 null 的时候,那么下一次的捕获又会从索引 0 开始捕获
由一个正则的特性
叫做懒惰性
正则的标识符
+ 标识符是写在正则的后面的
1. g 表示全局的意思
// var reg = /\d{3}/
// var str = 'abcdefg123abcdefg234abcdefg456asdasd'
// var res = reg.exec(str)
// var res2 = reg.exec(str)
// console.log(res)
// console.log(res2)
// var reg = /\d{3}/g
// var str = 'abcdefg123abcdefg234abcdefg456asdasd'
// var res = reg.exec(str)
// var res2 = reg.exec(str)
// var res3 = reg.exec(str)
// var res4 = reg.exec(str)
// var res5 = reg.exec(str)
// console.log(res)
// console.log(res2)
// console.log(res3)
// console.log(res4)
// console.log(res5)
标识符
- 对正则的特殊修饰
1. g
+ 全部捕获
+ 抵消正则的懒惰性
2. i
+ 忽略大小写
+ 正则在检测字符串的时候不管字母的大小写
// var reg = /[a-z]/i
// var str = '1234A1234'
// var res = reg.test(str)
// console.log(res)
字符串和正则合作的方法
1. search()
语法: 字符串.search(正则)
返回值:
如果找到,返回的是字符片段开始的索引
如果没有,就是返回 -1
2. match()
语法: 字符串.match(正则)
返回值:
当正则没有全局标识符 g 的时候,和 exec 方法一样
当正则有全局标识符 g 的时候,返回值是捕获到的每一个内容(以一个数组的形式返回)
3. replace()
语法: 字符串.replace(正则)
返回值: 替换好的字符串
没有全局标识符 g 的时候是只替换一个
有全局标识符 g 的时候,会全部替换