正则表达式 - Regular Expression
目的:验证字符串是否符合规则
是一个复杂数据类型
正则表达式的创建
--字面量方式创建
-语法:var reg = /abcd/
const r1 = /abcd/
console.log(r1)
--内置法构造函数
-语法:var reg = RegExp(‘abcd’)
const r2 = new RegExp('abcd')
console.log(r2)
常用方法
1.匹配
目的:检测对还是不对
语法:正则表达式.test(字符串)
返回值:一个布尔值
如果字符串满足正则表达式规则,那么返回true
如果字符串不满足正则表达式规则,那么返回false
2.捕获
目的:从原始字符串中截取符合正则表达式规则的部分字符串
语法:正则.exec(字符串)
返回值:
1.原始字符串中没有符合正则要求的字符串片段
-返回值就是 null
2.原始字符串内有符合正则要求的字符串片段
- 返回值是一个数组数据类型,【0】位置就是从字符串内捕获出来的内容
2-1. 正则没有()没有全局标识符g
- 返回值数组只有【0】数据
- 不管你捕获多少次,正则都是从原始字符串开始位置进行检索
2-2.正则有()
- 返回值数组【0】依旧是捕获出来的完整字符串片段
- 从【1】开始依次是每一个小括号的单独内容捕获
2-3. 正则有g
-返回的数组【0】依旧是捕获出来的的完整字符串片段
- 但是从第二次开始,会从第一次捕获结束的位置开始检索
-以此类推,知道找不到了为止,返回 null
- 再下一次又从字符串开始位置进行检索
元字符
1 \d 表示一位非数字 | |||
---|---|---|---|
2 \d 表示一位数字 | |||
3 \s 表示一位空白内容(空格,缩进) | |||
4 \S 表示一位非空白内容 | |||
5 \w 表示一位数字字母下划线任意内容 | |||
6 \W 表示一位非数字下划线的的任意内容 | |||
7 . 表示一位非换行的任意内容 | |||
8 \ 表示转义符 |
边界元字符
^ 表示字符串开始
$ 表示字符串结束
注意:当 ^ 和 $ 一起使用的时候,表示从开始到结束
限定元字符
概念:一个限定符只能修饰前面一个符号
\1. * 表示重复出现 0 - 正无穷次
\2. + 表示重复出现 1 - 正无穷次
\3. ? 表示重复出现 0 - 1 次
\4. {n} 表示重复出现 n 次
\5. {n,} 表示重复出现 n - 正无穷次
\6. {n,m} 表示重复出现 n -m 次
特殊元字符
\1. ()
含义1:一个整体
含义2. 单独捕获
\2. |
- 或者
- 一般和 () 连用
- 只有 () 和 ^ 和 $ 能区分或的边界
\3. []
- 一个[] 只占一位字符位置
- 书写在 [] 内的任意一个字符都行
\4. [^]
- 一个 [^] 只占一位字符位置
- 书写在 [^] 内的任意一个字符都不行
\5. 中划线 (-)
- 表示 至 或者 到
- 一般和 [] 连用
- 必须保证ASCII 码是连续的
- 特殊:\u4e00 - \u9fa5 所有中文
重复元字符
\1. \1 \2 \3 \4 \5 \6
重复出现
需要第 n 个()出现的内容一模一样
注意:不是重复几次,是重复第几个小括号
区分小括号:在正则内按照小括号开始数数
预查元字符
1.正向肯定预查
(?=内容) 真实正则内容
2.正向否定预查
(?!内容)真实正则内容
3.负向肯定预查
(?<=内容)真实正则内容
4.负向否定预查
(?<!内容)真实正则内容
标识符
书写在正则外面,正则的后面
用来修饰整个正则表达式使用的
1.g 全局标识符 global
2.i 忽略大小写 ignore
正则的两大特性
\1. 懒惰性
当你捕获内容的时候, 每一次都会默认从字符串的开头开始检索
解决方案: 加一个全局标识符 g
\2. 贪婪性
贪婪匹配 能拿多少拿多少 尽可能多的捕获
非贪婪匹配 能拿多少拿多少 尽可能少的捕获
解决方案: 使用非贪婪限定符
贪婪匹配 指的都是 限定符
贪婪限定符
*
+
?
{n,}
{n,m}
非贪婪限定符
*?
+?
??
{n,}?
{n,m}?
字符串常用方法
\1. replace()
=> 语法:
-> 字符串.replace(换下字符, 换上字符)
-> 字符串.replace(正则表达式, 换上字符)
=> 返回值: 替换好的字符串
-> 当你传递的是正则表达式, 并且带有 g 标识符的时候, 会全部替换
\2. search()
=> 语法:
-> 字符串.search(字符串片段)
-> 字符串.search(正则表达式)
=> 返回值:
-> 如果有该字符串片段, 就是该字符串片段的开始索引位置
-> 如果没有该字符串片段, 就是 -1
\3. match()
=> 语法:
-> 字符串.match(字符串片段)
-> 字符串.match(正则表达式)
=> 返回值:
-> 当你参数传递字符串片段, 或者没有 g 的正则表达式的时候, 和 exec 一模一样
-> 当你参数传递正则表达式, 并且有全局标识符 g 的时候, 返回值是一个数组, 里面是捕获到的所有内容