js正则表达式梳理

2023-01-11 21:13:33 浏览数 (1)

正则表达式简介

正则表达式(Regular Expression): 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的租和,组成一个“规则字符串”,这个规则字符串用来表达对字符串的一种过滤逻辑。

正则表达式的作用

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)。
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)。
  3. 强大的字符串替换能力(替换)。

正则表达式的组成

  • 普通字符 abc 中国 123 等
  • 特殊字符(元字符、限定符、中括号):正则表达式中有特殊意义的字符。

元字符

元字符就是在正则表达式中具有特殊含义的字符。

元字符

说明

.

匹配任意除了换行符(回车键)之外的单个字符

d

匹配数字

D

匹配非数字

w

匹配字母、数字、下划线

W

匹配非字母、数字、下划线

s

匹配空格

S

匹配非空格

b

匹配单词边界

B

匹配非单词边界

匹配NULL字符

n

匹配换行符

t

匹配制表符

v

匹配垂直制表符

xxx

查找以八进制数 xxxx 规定的字符

uxxxx

查找以十六进制 xxxx规定的 Unicode 字符

数量符

控制字符出现的次数,对字符个数限制

数量符

说明

n*

匹配任何包含零个或者多个n的字符串。n{0,}

n

匹配任何包含至少一个n的字符串。n{1,}

n?

匹配任何包含零个或一个n的字符串。{0,1}

n{x}

匹配包含x个n的序列的字符串。

n{x,}

匹配包含至少x个n的序列的字符串。

n{x,y}

匹配包含至少x个至多y个n的序列的字符串。

n$

匹配任何结尾为n的字符串。

^n

匹配任何开头为n的字符串。

范围符

一个中括号就代表一个字符串,中括号的目的解视控制一个字符的范围。

中括号

说明

[abc]

查找一个括号之间的任何字符。

[^abc]

查找一个任何不在方括号之间的字符,^在中括号中有取反的意思。

[0-9]

查找一个任何从0至9的数字。

[a-z]

查找一个任何从小写a到小写z的字符。

[A-Z]

查找一个任何从大写A到大写Z的字符。

[A-z]

查找一个字母(包含大小写和下划线)。

[[u4e00-u9fa5]]

查找一个汉字。

选择符

特殊符号:正则1|正则2。 符合或两边其中一个就可以匹配。

如:google,baidu,bing; // 匹配三种其中一种字符串

正则:google|baidu|bing

特殊符号: (正则) ;

组指的是一个小集体,分组就是将一个大集体可以分成几个小集体。

如:控制你的名字连续出现的次数,最少1次,最多3次

正则:^(hyl){1,3}$

修饰符

修饰符

说明

g

全局匹配。 如: var reg = /hello/g

i

全局忽略大小写。 如: var reg = /Hello/i

gi

全局匹配且忽略大小写。 如: var reg = /Hello/gi

位置符

位置符

说明

^

匹配开头

$

匹配结尾

(?=p)

符合p子模式前面的位置

(?!p)

除了(符合p子模式前面的位置)的所有位置

(?<=p)

符合p子模式后面的位置

(?<!p)

除了(符合p子模式后面的位置)的所有位置

转义符

在正则中表示特殊符号。去除.的特殊意义,需要转义: .

贪婪匹配 VS 惰性匹配

正则本身是贪婪的,会尽可能的多匹配符合模式的字符

代码语言:javascript复制
1let regex = /d{2,5}/g
2let string = "123 1234 12345 123456"
3// 贪婪匹配
4// string.match(regex) // [ 123, 1234, 12345, 12345 ]
5
6// 惰性匹配
7let regex2 = /d{2,5}?/g
8// string.match(regex) // [ 12, 12, 34, 12, 34, 12, 34, 56  ]
9

量词后面加一个?,即变成了惰性匹配

js中使用正则表达式

代码语言:javascript复制
1//方式1: 语法: var 变量 = new RegExp("规则","修饰符")
2var reg = new RegExp("d","g")
3
4//方式2: 语法:var 变量 = /正则表达式/ (推荐使用)
5var reg = /d/g;

相关正则方法

  • 正则对象.test(字符串); 校验匹配正则的子字符串,返回布尔值。
  • 字符串.match(正则对象); 获取匹配正则的子字符串,返回一个数组。
  • 字符串.replace(正则对象,替换后的内容); 替换所匹配正则的子字符串。返回替换后的字符串。

替换类案例

字符串开头或结尾塞一个笑脸

代码语言:javascript复制
1let string = "hello"
2
3console.log(string.replace(/^/, "


	

0 人点赞