正则表达式知识点归纳
正则表达式
正则表达式即规则表达式,是一种规则书写形式,用于查找匹配指定规则的字符串,简化代码。
正则的创建方式:
- 直接量定义格式: / 规则表达式 / 修饰符
- 创建对象:new RegExp ( 规则表达式字符串 [,修饰符 )
(注意:当规则写在变量中,创建正则想直接使用这个变量,必须用创建对象的方式。)
let re1 = /a/; let re2 = new RegExp("a");
正则的方法:
re.test(str):
作用:检测字符串str是否符合正则re的规则,符合返回 true 否则返回 false。
str.search(str|re):
作用:检索指定参数字符串或参数正则表达式匹配到在原字符串上首次出现的位置,没有检索到则返回-1。
(search方法与字符串的indexOf方法作用相同,唯一的区别是:indexOf不能接收正则,而search可以。)
str.match(str|re):
作用:检索指定参数字符串或正则表达式匹配到在原字符串上符合规则的字符,把它们放在数组中,返回数组,没有检索到则返回 Null。
(注意:在创建正则re时设置全局修饰符g ( global ),检索字符串中所有符合规则的字符。否则match只会检索一次,即:把首次出现的符合规则的字符存入数组并返回。)
str.replace(str||re,new str||function):
作用:替换字符串中某些符合规则的字符,返回替换后的新字符串。
(当第二个参数是回调函数时:要替换的文本是回调函数的返回值,回调函数的参数,是每一次匹配成功的字符串。)
let str = '用replace方法过滤掉敏感词示例(符合re规则的敏感词用*代替)' let re = /过滤|敏感词/g; let newStr = str.replace(re,function ($0,$1,$2){ /* | 或 $0 re规则匹配成功的字符串 $1 匹配成功的字符串下标 $2 原字符串str */ return '*'.repeat($0.length) });
/*
注意:
上述$0、$1、$2所代表的值,是在正则没有分组子模式(即()提权)或提权()内开头书写了 “?:” 的前提下; 如果正则中有分组子模式(即()提权),则: $0 re正则匹配成功的字符串 $1 分组匹配的信息 $2 分组匹配的信息 …… (从第二个参数开始,表示分组信息,视分组多少而定,之后是字符串下标及原字符串。) */
限定符
限定字符出现的次数
-
n,m 都是数字
{n} 出现 n 次 {n,} 至少出现 n 次,无上限 {n,m} 至少出现 n 次,最多 m 次
-
特殊符号
+ 最少出现 1,无上限 {1,} * 最少出现 0,无上限 {0,} ? 最少出现 0,最多 1 次 {0,1}
修饰符
用在正则的 / / 之后,对匹配规则加以限定
- i:忽略大小写
- g:全局匹配
转义符
- \n 表示换行
- \\ 表示\
- \’ 表示单引号’
- \” 表示双引号”
- \t 表示一个tab
- . 表示一个 . 字符
\d 代表一个数字
\D 代表非数字
\s 代表一个空格
\S 代表非空格
\w 代表数字 字母 下划线 _
\W 代表非数字 字母 下划线 _
\b 单词边界 一个\w左边或右边不存在一个\w 就是一个单词边界
\B 非单词边界
. 代表任意一个不包含换行 \n 的字符
正则表达式中的“^”只能紧跟在第一个反斜杠后,代表匹配字符串的开头;“$”只能紧跟在第二个反斜杠前,代表匹配字符串的结尾。
[ ]中可以书写一个范围,表示匹配此范围中的一个字符(仅一个),其中如果以“^”开头,则表示排除[ ]中书写的字符。
( )表示提权,把括号内的部分看做一个整体,作为整个正则的一个分组、子模式,
两种模式
贪婪模式
默认情况下,正则倾向于尽可能多的匹配
懒惰模式
当加上“?”后,开启懒惰模式,尽可能少的进行匹配
常用正则
QQ:/^[1-9]\d{4,10}$/
邮箱:/^\w+@[0-9a-z]{2,10}(?:.[a-z]{2,4}){1,3}$/i
中文:/[\u4e00-\u9fa5]/g