Skip to content

正则

创建正则表达式

  1. 字面量创建
js
const reg = /a/g
  1. 构造函数创建
js
const reg = new RegExp('a', 'g')

选择符

| 代表选择修饰符,满足左右两边任何表达式即为真

js
// 检测手机号中是否包含1或者4
const phone = 18233333333
const reg = /1|4/

reg.test(phone) // true

字符边界

边界符含义
^匹配字符串的开始
$匹配字符串的结尾,忽略换行符

转义字符

在正则表达式中,一些字符含有特殊含义,如果我们要匹配该字符本身,就需要进行转义。 \表示转义符

js
// 匹配字符串中是否包含.
const reg = /\./

检测网址

js
const url = 'http://www.whbbit.cn'
const reg = /https?:\/\/\w+\.\w+\.\w+/
console.log(reg.test(url))

元字符

元字符是正则表达式中的最小元素,只代表一个字符

元字符含义
\d匹配任何一个数字字符
\D匹配任何一个不是数字的字符
\w匹配任何一个英文字母、数字、下划线字符
\W匹配任何一个除英文字母、数字、下划线的字符
\s匹配任意一个空白字符,如空格、制表符、换行等
\S匹配任意一个非空白字符
.匹配除换行外的任意字符
js
const str = '1234567890'
// 匹配字符串中是否有数字
const reg = /\d/
console.log(reg.test(str)) // true

模式修饰

模式修饰含义
i不区分大小写
g全局搜索所有匹配内容
m视为多行
s忽略换行符
yregexp.lastIndex 开始匹配
u正确处理四个字符的UTF-16编码

分组

() 表示分组

js
// 匹配字符串中是否包含12或者34
const reg = /(12|34)/

分组中的 ?: 表示不记录该组

lastIndex 每次匹配后lastIndex都是字符所在位置,直至匹配不到重制为0

原子表

在一组字符中匹配某个元字符,在正则表达式中通过元字符表来完成。[]内表示该元字符表

原子表含义
[]只匹配其中的一个原子
[0-9]匹配0-9任意一个数字
[a-z]匹配任意一个小写字母
[A-Z]匹配任意一个大写字母

重复匹配

符号含义
*表示匹配前一个字符0次或者无限次
+表示匹配前一个字符1次或者无限次
?表示匹配前一个字符0次或者1次
{n}表示匹配前一个字符n次
{n,}表示匹配前一个字符n次或者无限次
{n,m}表示匹配前一个字符n次到m次

前瞻运算符

前瞻运算符不消耗字符,可以用于字符串的预检。(?=规则)

  • 匹配一个6-12位的字符串,包含大写字母、小写字母、数字、特殊字符@.
js
const reg = /^(?=[A-Z])(?=[a-z])(?=\d)(?=[@.])[A-Za-z\d@.]{6,12}$/