专门为初学者编写的正则表达式入门教程

这是一篇翻译文章。我学过很多次正则表达式,总是学了忘,忘了学,一到用的时候还是只能靠搜索引擎。

这回看到这个正则教程,感觉非常惊喜。尝试翻译了一遍,译得不好,大家可以看原文,很容易理解。

原文地址:https://refrf.shreyasminocha.me/

1 介绍

正则表达式允许定义一种模式,并通过这种模式针对字符串执行对应的操作。与模式匹配的子字符串称为“匹配”。

正则表达式是定义搜索模式的一串字符。

正则表达式主要用在如下场景:

输入验证

查找替换操作

高级字符串操作

文件搜索或重命名

白名单和黑名单

正则表达式不太适合用在这些场景:

XML 或 HTML 解析

完全匹配的日期

有许多实现正则匹配的引擎,每种都有自己的特性。这本书将避免讨论(不同引擎之间的)特性差异,而是只讨论在大多数情况下不同引擎都共有的特征。

整本书中的示例使用JavaScript。因此,这本书可能会稍微偏向 JavaScript 的正则引擎。

2 基础

正则表达式通常格式化为 /<rules>/<flags>,通常为了简洁而省略后面的 /<flags>。关于 flag 我们将在下一章详细讨论。

让我们从/p/g 这个正则表达式开始。现在,请将 /g flag 视为固定不变的。

/p/g

专门为初学者编写的正则表达式入门教程

如我们所见,/p/g 匹配所有小写的 p 字符。

注意

默认情况下,正则表达式区分大小写。

在输入字符串中找到的正则表达式模式的实例称为“匹配”。

/pp/g

专门为初学者编写的正则表达式入门教程

3 字符组

可以从一组字符中匹配一个字符。

/[aeiou]/g

专门为初学者编写的正则表达式入门教程

[aeiou]/g 匹配输入字符串中的所有元音。

下面是另一个例子:

/p[aeiou]t/g

专门为初学者编写的正则表达式入门教程

我们匹配一个 p,后跟一个元音,然后是一个 t。

有一个更直观的快捷方式,可以在一个连续的范围内匹配一个字符。

/[a-z]/g

专门为初学者编写的正则表达式入门教程

警告

表达式 /[a-z]/g 只匹配一个字符。在上面的示例中,每个字符都有一个单独的匹配项。不是整个字符串匹配。

我们也可以在正则表达式中组合范围和单个字符。

/[A-Za-z0-9_-]/g

专门为初学者编写的正则表达式入门教程

我们的正则表达式 /[A-Za-z0-9_-]/g 匹配一个字符,该字符必须(至少)是以下字符之一:

A-Z

a-z

0-9

_ 或者 -

我们也可以“否定”这些规则:

/[^aeiou]/g

专门为初学者编写的正则表达式入门教程

/[aeiou]/g与 /[^aeiou]/g 之间的唯一区别是 ^ 紧跟在左括号之后。其目的是"否定"括号中定义的规则。它表示的意思是:

匹配任何不属于a、e、i、o和 u 的字符

3.1 例子

非法的用户名字符

/[^a-zA-Z_0-9-]/g

专门为初学者编写的正则表达式入门教程

指定字符

/[A-HJ-NP-Za-kmnp-z2-9]/g

专门为初学者编写的正则表达式入门教程

4 字符转义

字符转义是对某些通用字符类的简略表达方式。

4.1 数字字符 \d

转义符 \d 表示匹配数字字符 0-9。等同于 [0-9]。

/\d/g (这里请仔细看)

专门为初学者编写的正则表达式入门教程

/\d\d/g

专门为初学者编写的正则表达式入门教程

\D是\d 的反面,相当于[^0-9]。

/\D/g

专门为初学者编写的正则表达式入门教程

4.2 单词字符 \w

转义符 \w 匹配单词字符。包括:

小写字母 a-z

大写字母 A-Z

数字 0-9

下划线 _

等价于 [a-zA-Z0-9_]

/\w/g

专门为初学者编写的正则表达式入门教程

/\W/g

专门为初学者编写的正则表达式入门教程

4.3 空白字符 \s

转义符 \s匹配空白字符。具体匹配的字符集取决于正则表达式引擎,但大多数至少包括:

空格

tab 制表符 \t

回车 \r

换行符 \n

换页 \f

其他还可能包括垂直制表符(\v)。Unicode自识别引擎通常匹配分隔符类别中的所有字符。然而,技术细节通常并不重要。

/\s/g

专门为初学者编写的正则表达式入门教程

/\S/g (大写 s)

专门为初学者编写的正则表达式入门教程

4.4 任意字符 .

虽然不是典型的字符转义。. 可以匹配任意1个字符。(除换行符 \n 以外,通过 dotall 修饰符,也可以匹配换行符 \n)

/./g

专门为初学者编写的正则表达式入门教程

5 转义

在正则表达式中,有些字符有特殊的含义,我们将在这一章中进行探讨:

|

{,}

(,)

[,]

^, $

+, *, ?

\

. 只在字符类中的字面量。

- : 有时是字符类中的特殊字符。

当我们想通过字面意思匹配这些字符时,我们可以再这些字符前面加 \ “转义”它们。

/\(paren\)/g

专门为初学者编写的正则表达式入门教程

/(paren)/g

专门为初学者编写的正则表达式入门教程

/example\.com/g

专门为初学者编写的正则表达式入门教程

/example.com/g

专门为初学者编写的正则表达式入门教程

/A\+/g

专门为初学者编写的正则表达式入门教程

/A+/g

专门为初学者编写的正则表达式入门教程

/worth \$5/g

专门为初学者编写的正则表达式入门教程

/worth $5/g

专门为初学者编写的正则表达式入门教程

5.1 例子

JavaScript 内联注释

/\/\/.*

专门为初学者编写的正则表达式入门教程

星号包围的子串

/*[^\*]*\*

专门为初学者编写的正则表达式入门教程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzjxj.html