正则表达式的几种常见情景下的使用方式汇总


2020-08-18 正则表达式

编程开发人员,不管是用什么平台,不管使用什么语言。在做规则校验的时候不免都会接触到一个东西,叫做“正则表达式”,使用正则表达式能让我们能很好的定义规则,获去到我们想要的数据格式和校验结果。

推荐教程:W3C_正则表达式

推荐工具:在线正则表达式测试

# 一、JavaScript中基础使用

正则表达式主要是由2个部分组成

/pattern/modifiers

pattern:模式,定义表达式的主体

modifiers:修饰,修饰表达式的条件

# 1.1 定义正则表达式

在JavaScript中有两种方法定义正则表达式

第一种:直接定义(推荐)

let reg = /abc/i
1

第二种:实例化对象

let reg = new RegExp('abc', 'i')
1

# 1.2 RegExp 对象的方法

# test()

test() 方法检索字符串中的指定值。返回值是 true 或 false。

let patt1=new RegExp("e");

document.write(patt1.exec("The best things in life are free"));
// 由于该字符串中存在字母 "e",以上代码的输出将是:true
1
2
3
4

# exec()

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

let patt1=new RegExp("e");

document.write(patt1.exec("The best things in life are free")); 
// 由于该字符串中存在字母 "e",以上代码的输出将是:e
1
2
3
4

在使用 "g" 参数时,exec() 的工作原理如下:

  • 找到第一个 "e",并存储其位置
  • 如果再次运行 exec(),则从存储的位置开始检索,并找到下一个 "e",并存储其位置

# compile()

compile() 方法用于改变 RegExp。

compile() 既可以改变检索模式,也可以添加或删除第二个参数。

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free"));

patt1.compile("d");

document.write(patt1.test("The best things in life are free"));
1
2
3
4
5
6
7

由于字符串中存在 "e",而没有 "d",以上代码的输出是: true false

# 1.3 配合字符串方法使用

在 JavaScript 中,正则表达式常用于两个字符串方法:search() 和 replace()。

search() 方法使用表达式来搜索匹配,然后返回匹配的位置。

replace() 方法返回模式被替换处修改后的字符串。

# 配合search() 搜索字符串

search() 方法也接受字符串作为搜索参数。字符串参数将被转换为正则表达式:

var str = "Visit W3School";
var n = str.search(/w3school/i); 
// 返回目标所在索引位置 6
1
2
3

用法跟字符串方法indexOf()较为相似

# 配合replace() 替换字符串

使用大小写不明的正则表达式以 W3school 来替换字符串中的 Microsoft:

var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "W3School"); 
// 结果:Visit W3School!
1
2
3

# 二、正则基础知识补充

补充四个正则的基础知识点,修饰符,元字符、量词、括号

# 2.1 正则修饰符

修饰符 描述
i 执行对大小写不敏感的匹配,忽略大小写
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m 执行多行匹配

# 2.2 元字符

元字符 描述
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

# 2.3 量词

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。

# 2.4 括号

表达式 描述
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字。
(x|y) 查找由 | 分隔的任何选项。

# 三、常用场景表达式

image-20200818080352261

# 四、进阶场景表达式

网站中描述的很清楚,还支持在线测试,在这不赘述:https://tool.oschina.net/regex#

image-20200818103830496

Last Updated: 2/10/2023, 3:06:44 AM
Powered By Valine
v1.5.1