正则表达式,一般用来爬虫,也叫规则表达式,简称正则。由我们自己书写的规则,专门用来检测 字符串,是否符合规则使用。我们用一些特殊的字符串或者符号定义一个规则表达式,用来检验字符串。
目录
1、创建一个正则表达式
把一些字母和符号放在 // 中间的东西,叫做正则表达式。比如/abcd/
①字面量创建
// 1 字面量创建
var reg = /abc/
console.log(reg)
②构建函数创建
// 2 构造函数创建
var reg2 = new RegExp('abc')
console.log(reg2)
2、元字符
. | 匹配非换行的任意字符 什么都对除了换行符(\n) |
\d | 匹配数字 |
\D | 匹配非数字 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或数字或下划线 |
\s | 匹配空白字符串(空格 tab制表符) |
\S | 匹配非空白字符串 |
// 1 规则:要求有空格
var reg = /\s/
var str = 'a b'
var str2 = 'ab'
console.log(reg.test(str))//true
console.log(reg.test(str2))//false
3、转义字符
把有意义的符号转换成没有意义的符号,把没有意义的转换成有意义的
4、限定符
+ | 前一个内容重复至少一次,也就是可以出现1-正无穷次 |
* | 前一个内容重复至少0次,也就是可以出现0-正无穷次 |
? | 前一个内容重复0-1次,也就是可以出现0-1次 |
{n} | 前一个内容重复n次,也就是必须出现n次 |
{n,} | 前一个内容重复至少n次,也就是可以出现n-正无穷次 |
{n,m} | 前一个内容重复至少n次,至少m次,也就是可以出现n-m次 |
// 1 下面的表达式至少有一个数字
var reg = /\d+/
// 2 要求有数字出现0-正无穷次
var reg = /\d*/
// 3 要求有数字出现0-1次
var reg = /\d?/
// 4 要求数字出现2次
var reg = /\d{2}/
// 5 要求数字出现2-5次
var reg = /\d{2,5}/
// 6 要求数字出现2-正无穷
var reg = /\d{2,}/
5、边界符
是限定正则字符串开头和结束的
^ | 表示他后面的内容必须在开头 |
$ | 表示他前面的内容必须在结尾 |
^$ | 表示有且仅有她们中间的内容,也就是精确匹配 |
// 1 下面从头到尾只有数字,并且只能出现2-5次
let reg = /^\d{2,5}$/
// 2 下面从头到尾只是数字,并且至少出现一次
let reg = /^\d+$/
6、特殊符号
() | 限定一组元素 |
[] | 字符集合,表示写在[]里面的任意一个都行 |
[^] | 反字符集合,表示写在[] 里面之外的任意一个都行 |
- | 范围,比如a-z 小写a到z ,A-Z (大写A-Z) |
| | 或,正则里面的 a|b 就表示 a或者b 都可以通过 |
// 1 写一个简单的邮箱验证
let reg = /^[^_$].{6,}@(163|126|qq|sina)\.(com|cn|net)$/
// 2 以字母开头,以数字结尾,中间任意一个字符
let reg = /^[a-zA-Z].\d$/
// 3 写出中国人民 姓名的正则 2-4个字
let reg = /^[\u4e00-\u9fa5]{2,4}$/
7、标识符
i | 表示忽略大小 |
g | 表示全局匹配 就是在找到第一个匹配成功的元素之后仍然会继续查找 |
m | 表示多行匹配 |
8、正则表达式的方法
主要是用来检测和捕获字符串的内容的
①test检测方法
语法:正则.test(字符串)
用来检测字符串 是否 符合我们的正则标准,返回布尔类型
②exec
主要用于把字符串中符合条件的内容捕获出来
语法:正则.exec(字符串)
返回值:字符串中符合正则的第一项以及一些其他信息,返回数组类型
9、配合正则使用的字符串方法
①seach
== 是查找字符串中是否有满足正则的内容
语法:字符串.seach(正则)
返回值:有的话返回第一个匹配元素的索引,没有返回-1
开不开g 无所谓
②match
方法可在字符串内检索指定的值,找到一个或多个正则表达式的匹配
语法:字符串.match(正则)
返回值:不开g 和 exec 一模一样 字符串中符合正则的第一项 以及一些其他信息,返回数组类型。开g 返回一个数组,里面是匹配到的每一项
③replace
将字符串中符合正则表达式的字符 替换掉
语法:字符串.replace(正则,'替换成的字符串')
返回值:替换好的字符串
不开g值 替换一个
开g 所有符合的都替换掉
10、 正则表达式的两个特征
// 正则表达式有两个特征
// == 当我们正则表达式有限定符的时候,通常的行为是尽可能多的匹配字符
// 1 贪婪性 - 默认启动
// == 就是在正则匹配成功的前提下,尽可能多的去匹配最大能匹配的字符串
// 2 懒惰性 - 加?启用
let str = 'hello123sdhfh'
// 贪婪
let reg = /\d+/
// 懒惰
let reg2 = /\d+?/
console.log(str.replace(reg,''))
console.log(str.replace(reg2,''))