Skip to content
This repository has been archived by the owner on May 4, 2022. It is now read-only.

Latest commit

 

History

History
209 lines (137 loc) · 6.23 KB

4-正则表达式.md

File metadata and controls

209 lines (137 loc) · 6.23 KB

目标

  • 能够说出正则表达式的作用
  • 能够写出简单的正则表达式
  • 能够使用正则表达式对表单进行验证
  • 能够使用正则表达式替换内容

1. 正则表达式概述

1.1 什么是正则表达式

正则表达式(Regular Expression)用于匹配字符串中字符组合的模式,在JS中,正则表达式也是对象

正则表达式通常被用于检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名只能输入英文字母、数组或下划线(匹配)。此外,正则表达式还用于过滤页面中的敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等

1.2 正则表达式的特点

  • 灵活性、逻辑性和功能性非常强
  • 可以迅速用极简单的方式达到字符串的复杂控制
  • 对于刚接触的人来说,比较晦涩难懂
  • 实际开发中,我们一般直接复制写好的正则表达式,会根据现有的做一些小修改

2. 正则表达式在JS中的使用

2.1 创建正则表达式

在JS中,有两种创建正则的方式

1. 通过调用RegExp对象的构造函数创建
var reg = new RegExp(/表达式/);
2. 通过字面量创建
var reg = /表达式/;

表达式不需要加引号,不论是字符串型还是数字型

2.2 测试正则表达式test

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

regxObj.test(str);
  • regxObj:正则表达式
  • str:检测的字符串

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

3.1 正则表达式的组成

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

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

3.2 边界符

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

边界符 说明
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)
var reg = /^abc$/; //精确匹配,要求必须是abc字符串才符合
console.log(reg.test("abc")); // true
console.log(reg.test("abcd")); // false
console.log(reg.test("aabc")); // false

3.3 字符类

1. []

字符类表示有一系列的字符可以选择,只需要匹配任意一个都行了,所有可供选择的字符放在[]

var reg = /[abc]/; // abc匹配任意一个就行
var reg2 = /^[abc]$/; // 只有 a b c 这三个字符才会返回true
2. 方括号内部范围符-
var reg = /^[a-z]$/; // 26个小写英文字母返回true
3. 字符组合

可以在正则中添加多个限定条件

var reg = /^[a-zA-Z0-9_-]$/; // 包括26个英文字母+数字+下划线+短横线
4. ^写在[]里面

这个意思是取反,表示除了[]里面的条件都是true

var reg = /^[^a-z]$/; // 除26个小写英文字母外都为true
5. 或者符|

前面的条件或者后面的条件满足任意1个

var reg = /^[a-z]|[A-Z]$/; // 小写字母或者大写字母均可

3.4 量词符

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

量词 说明
* 重复0次或多次(>=0)
+ 重复1次或多次(>=1)
? 重复0次或1次(0 || 1)
{n} 重复n次(=n)
{n, } 重复n次或更多次(>=n)
{n, m} 重复n次到m次(n<= 次数 <=m)
var reg1 = /^a*$/; // a出现的次数>=0
var reg2 = /^a+$/; // a出现的次数>=1
var reg3 = /^a?$/; // a出现的次数1或0
var reg4 = /^a{5}$/; // a出现的次数为5次
var reg5 = /^a{8,}$/; // a出现的次数>=8
var reg6 = /^a{4,6}$/; // 4<=a出现的次数<=6

3.5 括号总结

大括号量词符,表示重复次数。{4,6}

中括号字符集合,匹配方括号的任意字符。[a-zA-Z]

小括号优先级

在线测试:https://c.runoob.com/front-end/854

3.6 预定义类

预定义类指的是某些常见模式的简写模式

预定义类 说明
\d 匹配0-9之间的任一数字,相当于[0-9]
\D 匹配非0-9的字符,相当于[^0-9]
\w 匹配任意字母,数字和下划线,相当于[A-Za-z0-9_]
\W 匹配非字母、数字和下划线的字符,相当于[^A-Za-z0-9_]
\s 匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f]
\S 匹配非空格的字符,相当于[^\t\r\n\v\f]

3.6 正则案例

表单验证案例

手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

QQ号码:^[1-9][0-9]{4,}$

中文:^[\u4e00-\u9fa5]$

源码:JS文件

4. 正则表达式中的替换

4.1 replace替换

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

stringObject.replace(regexp/substr, replacement)
  • 第1个参数:被替换的字符串或者正则表达式
  • 第2个参数:替换为的字符串
  • 返回值是一个替换完毕的字符串

4.2 正则表达式参数

/表达式/[switch]

switch也称为修饰符,按照什么样的格式去匹配,有三种值:

  • g:全局匹配
  • i:忽略大小写
  • gi:全局匹配+忽略大小写
var reg = /[a-z]/gi;