# 15.正则表达式

# 1.正则表达式概述

正则表达式(Regular Expression) 适用于匹配字符串字符组合的模式。

在JavaScript中,正则表达式也是对象

正则表通常用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单之恩那个输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤页面内容中的一些敏感内容(替换),或从字符串中获取到特定部分(提取)等

# 2.正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强
  2. 可以迅速地用极简单的方式达到字符串地复杂控制
  3. 对刚接触的人来说比较晦涩难懂
  4. 实际开发一般都是直接复制写好的正则表达式,但是要求会使用正则表达式且根据实际情况修改正则表达式

# 3.正则表达式在JavaScript中的使用

# 3.1创建正则表达式

1.通过调用RegExp对象的构造函数创建

let 变量名 = new RegExp(/表达式/)
let reg = new RegExp(/123/)
console.log(exp)

2.通过字面量创建

let 变量名 = /表达式/
let reg = /123/

# 3.2测试正则表达式 test

test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回true或false,其参数式测试字符串

regexObj.test(str)
console.log(reg.test('123'))	// true
console.log(reg.test('abc'))	// false

# 4.正则表达式中的特殊字符

# 4.1 正则表达式的组成

一个正则表达式可以由简单的字符构成,比如/abc/,也可以是简单和特殊字符的组合,比如 /ab*c/。 其中特殊字符也被称为元字符,在正则表达式中具有特殊意义的专用符号,如 ^ $ + 等

特殊字符非常多,可以参考:

🔗 ​MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions (opens new window)

# 4.2 边界符

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

边界符 说明
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)
let reg = /abc/
console.log(reg.test('abc'))	//true
console.log(reg.test('abcd'))	//true
console.log(reg.test('eabc'))	//true
// /abc/——只要包含abc,就为true

let reg2 = /^abc/	//添加边界符,只能以a开头
console.log(reg2.test('abc'))	//true
console.log(reg2.test('abcd'))	//true
console.log(reg2.test('eabc'))	//false

let reg3 = /^abc$/	// 以a开头 c结尾
console.log(reg3.test('abc'))	//true
console.log(reg3.test('abcd'))	//false

如果两个边界符在一起,表示必须是精确匹配

# 4.3 字符类

字符类: [] 表示有一系列字符可供选择,只要匹配其中一个即可

let reg = /[abc]/	// 只要包含a或b或c 即为true
console.log(reg.test('apple'))	// true
console.log(reg.test('buy'))	// true
console.log(reg.test('touch'))	// true
console.log(reg.test('sos'))	// false

let reg2 = /^[abc]$/	// 三选一,只可以是a或b或c
console.log(reg2.test('a'))	// true
console.log(reg2.test('aa'))	// false
console.log(reg2.test('ab'))	// false

[-] 方括号内部 范围符 -

let reg = /[a-z]/	//只要包含小写字母 即为true
console.log(reg.test('a123'))	// true
console.log(reg.test('1'))	// false

字符组合

let reg = /[a-zA-Z]/	// 大写小写字母均可
reg = /^[a-zA-Z0-9_-]$/
console.log(reg.test('1'))	// true
console.log(reg.test('!'))	// false

取反 [^]

let reg = /^[^a-zA-Z0-9_-]$/
console.log(reg.test('1'))	// false
console.log(reg.test('!'))	// true

# 4.4 量词符

量词符用来设定某个模式出现的次数

量词 说明
* 0或多次
+ 1或多次
? 0 || 1 次
{n} n次
{n,} 重复n次或多次
{n,m} 重复n到m次
let reg = /^a*$/
console.log(reg.test(''))	// true
console.log(reg.test('a'))
console.log(reg.test('aaaaaaaa'))

reg = /^a+$/
console.log(reg.test(''))	// false
console.log(reg.test('a'))
console.log(reg.test('aaaaa'))

reg = /^a?$/
console.log(reg.test(''))
console.log(reg.test('a'))
console.log(reg.test('aaaa'))	// false

reg = /^a{3}$/
console.log(reg.test(''))	// false
console.log(reg.test('a'))	// false
console.log(reg.test('aaa'))	// true
console.log(reg.test('aaaaaaa'))	// false

reg = /^a{3,}$/
console.log(reg.test(''))	// false
console.log(reg.test('a'))	// false
console.log(reg.test('aaa'))	// true
console.log(reg.test('aaaaaaa'))	// true

reg = /^a{3,5}$/
console.log(reg.test(''))
console.log(reg.test('a'))	// false
console.log(reg.test('aaa'))
console.log(reg.test('aaaa'))
console.log(reg.test('aaaaa'))
console.log(reg.test('aaaaaaa'))	// false

# 4.5 结合使用

let reg = /^[a-zA-Z0-9_-]{6,16}$/

# 4.6 括号总结

  1. 大括号——量词符,表示重复次数
  2. 中括号——字符集合。匹配方括号中的任意字符
  3. 小括号——表示优先级

# 4.7 预定义类

预定义类 说明
\d 匹配0-9之间的任意数字,相当于[0-9]
\D 匹配所有0-9以外的字符,相当于[^0-9]
\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
\W 匹配反\w
\s 匹配空格,相当于[\t\r\n\v\f]
\S 匹配非空格
let reg = /^\w{6,16}$/

# 5.正则表达式中的替换

# 5.1 replace替换

replace()方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式

stringObject.replace(regexp/substr, replacement)
let str = '1551shuangge'
let newstr = str.replace('1551','114514')

let regNewStr = str.replace(/1551/,'114514')

# 5.2正则表达式参数

/表达式/[switch]

switch(也称修饰符) 按照什么样的模式来匹配,有三种值

  1. g 全局匹配
  2. i 忽略大小写
  3. gi 全局匹配和忽略大小写
let newstr = str.replace('1551'g, '114514')
更新时间: 7/10/2021, 3:24:04 PM