正则表达式
- 正则表达式我们可以叫规则表达式
- 由我们自己编写的规则
- 专门用来检测一个字符串是否符合我们的书写标准
- 一般都是用在表单认证 、 从字符串中获取某些内容
创建正则表达式的方式
const reg = /\d{3}/
- 内置构造函数创建
- 第一个参数是写在正则内部的符号
- 第二个参数是标识符
- 可以把多个标识符写在一个字符串里面
- 可以进行字符串拼接
const reg = new RegExp('\\d{3}')
var reg2 = new RegExp('a' + s + 'd')
正则表达式是一个复杂类型
正则表达式就是用来检测字符串是否满足要求的
元字符
-
.
(点) 非换行的任意字符
-
\
(斜线) 转义 ====》 把有意义的变成没意义的 =====》 把没意义的变成有意义的
-
\s
空格
-
\S
非空格
-
\d
数字
-
\D
非数字
-
\w
数字字母下划线
-
\W
非数字字母下划线
- \n :表示换行 , 将当前位置移到下一行开头
- \r : 表示回车 , 将当前位置移到本行开头
边界符
-
^
开始
-
$
表示结束
限定符
-
+
(加号) 表示 1 到 正无穷次
-
*
(星号) 表示 0 到 正无穷次
-
?
(问号) 表示 0 或者 1 次
-
{n}
表示 n 次
-
{n,}
表示至少 n 次 {1,} {1,}:等价于 + {0,}:等价于 *
-
{n,m}
表示 至少 n 次,至多 m 次 {0,1}:等价于 ?
特殊符号
-
()
小括号 表示一个集合 在捕获的时候单独捕获
-
[]
中括号 表示一个任意选择的集合 中括号内的内容出现任意一个就行
-
[^]
表示一个非任意选择集合 出现在这个符号中的任意一个字符都不能出现
-
|
或 || 逻辑或 | 占位或 一般和小括号一块使用
-
-
(中划线,英文状态下的中划线)
- 到(至)
- 一般和中括号一起使用
- 必须是 ASCII 编码挨着的
- [0-9] 等价与 \d
- [^0-9] 等价于 \D
- [0-9a-zA-Z_] 等价于 \w
- [^0-9a-zA-Z_] 等价于 \W
正则的方法
- 匹配
- 就是检测看看字符串是否符合规则
- test()
- 语法:正则表达式.test(字符串)
- 返回值:如果字符串满足我写的规则,就返回true,否则就返回false
const reg = /abcd/
let str = "asdasdasdasdas asdasd"
let res = reg.test(str)
console.log(res)
- 捕获
- 就是把字符串中符合要求的那一段字符给我单独拿出来
- exec()
- 语法:正则表达式.exec(要捕获的字符串)
- 返回值:是一个数组
- 有一些内容
- 数组第 0 项 是按照正则要求捕获出来的内容
- index:表示我找到的这个字符片段是从哪一个索引开始的
- input:表示原始字符串
- 因为正则的懒惰性
- 捕获完毕以后,下次捕获的时候还是从索引 0 开始查找
- 当正则有了标识符 g 的时候
- g 表示全局的意思
- 会在第二次捕获的时候,从第一次捕获的结尾开始查找
- 如果没找到就返回 null
- 当它返回 null 之后,下次的捕获又会从索引 0 开始捕获
- 正则的标识符
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
- 忽略大小写
- 正则在检测字符串的时候不管字母的大小写
字符串和正则合作的方法
- search()
- 语法:字符串.search(正则)
- 返回值:
- 如果找到,返回的是字符串片段开始的索引
- 如果没有, 就是返回 -1
var reg = /\d{3}/
var str = 'abcd123abcd123'
var res = str.search(reg)
console.log(res)
- match()
- 语法:字符串.match(正则)
- 返回值:
- 当正则没有全局标识符 g 的时候,和 exec 方法一样
- 当正则有全局标识符 g 的时候,返回值是捕获到的每一个内容(以一个数组的形式返回)
var reg = /\d{3}/
var str = 'asdasdas234asdad456sdasd789asdsa'
var res = str.match(reg)
console.log(res)
var reg2 = /\d{3}/g
var str2 = 'asdasdas234asdad456sdasd789asdsa'
var res2 = str2.match(reg2)
console.log(res2)
- replace()
- 语法:字符串.replace(正则)
- 返回值:替换好的字符串
- 没有全局标识符 g 的时候是只替换一个
- 有全局标识符 g 的时候,会全部替换
var str = 'asdasdasdadHHasdasdHHasdasdHHasdadsasdHHasdasdasd'
var reg = /HH/g
var res = str.replace(reg, '**')
console.log(res)