您唯一需要的 RegEx 指南
正则表达式是字符 模式 将文本中的字符序列关联起来。我们可以使用正则表达式来提取或替换部分文本,以及 HTML 页面中的地址或链接图像、修改文本格式或删除无效字符。
在本文中,我们将学习以下主题及更多内容:
- 正则表达式的结构如何?
- 正则表达式的元素是什么?
- 如何在 Javascript 中使用正则表达式?
- 奖金: 最有用的正则表达式备忘单
我们开工吧!
RegEx 的结构如何?
正则表达式基本上由 3 个组件组成:
- RegEx 本身,负责定义要匹配的模式
- 数据输入,构成将要经过正则表达式作用的数据
- 引擎,负责应用表达式
例如:假设我们需要一个 RegEx 验证电子邮件。 在这种情况下,我们将有以下组件:
- RegEx 将描述 有效电子邮件的模式
- 数据输入将是 电子邮件通知 由用户进行验证
- 引擎将是 编程语言 用于应用表达式
如何创建正则表达式?
正则表达式必须用斜线 (/) 括起来。并且在表达式之后,可能会有一些被调用的执行指示 旗帜 .
/元字符/[标志]
标志用于为引擎提供执行正则表达式时使用的特殊参数。标志是可选的,将被执行正则表达式的引擎接受或拒绝。
最常见的标志是:
- 我(忽略大小写) — 不应考虑大小写字符之间的差异。
- g(全球来源) — 在数据输入时启用全局数据捕获,以及保存出现索引并允许在它们之间导航(即,如果您的输入多次匹配,使用此标志您将获得所有结果,否则只会返回第一个匹配项)
- m(多行) — 通知条目由多行组成,从而将正则表达式应用于每一行。
什么是元字符?
元字符是在正则表达式中有意义的特殊字符。它们用于告诉引擎如何解析输入数据。正则表达式或 RegEx 由一组这些元字符组成。
每个元字符 服务于特定的功能 视情况而定。您可以创建许多组合并使用这些组合来执行更复杂的表达式。
让我们看看最常用的元字符:
开始 (^) 和结束 ($)
^(开始) — 表示正则表达式中的行首。句法:
/^<....>/
$(结束) — 表示正则表达式中的行尾。句法:
/<...>$/
示例 1:
- 正则表达式:
/^[1,9]/g
- 输入:
0,1,2,3,4
这里 没有匹配 ,因为 RegEx 搜索的行 开始 字符介于 1 和 9 之间。
示例 2:
- 正则表达式:
/^[1,9]/g
- 输入:
1,2,3,4,5
- 火柴:
1
这里 有一场比赛 ,因为输入以数字 1 开头。
示例 3:
- 正则表达式:
/[1,9]$/g
- 输入:
1,2,3,4,5
- 火柴:
5
也是一场比赛 , 但使用行尾,所以它匹配数字 5。
字符组([ 和 ])
[(小组开始) — 表示字符组的开始。句法:
/[<....>]/
](小组结束) — 表示字符组的结束。句法:
/[<...>$]/
例子:
想象一下,我们想要获取名称为“John”的所有匹配项,无论它们是用大写字母还是小写字母书写的。然后我们需要告诉引擎第一个字符可以是“j”或“J”。
-
正则表达式:
/[J,j]ohn/g
-
输入:
约翰
约翰
约翰
约瑟夫 -
火柴:
约翰
,约翰
点 (.)
. (通配符) — 表示任何其他字符。句法:
/./
例子:
想象一下,我们想要获取所有有四个字母并以后缀“and”结尾的单词。
-
正则表达式:
/.和/g
-
输入:
沙
相同的
棍棒
土地
牌 -
火柴:
沙
,棍棒
,土地
逻辑运算符 AND (.*)
。 (和)* — 在两个表达式之间进行逻辑运算 AND。句法:
/<exp-1> .*<exp-2> /
例子:
想象一下,我们想要获取所有以元音开头和结尾的名字。
-
正则表达式:
/[AEIOU].*[aeiou]/g
-
输入:
阿米拉
安娜
劳拉
苏菲
奥利维亚 -
火柴:
阿米拉
,安娜
,奥利维亚
逻辑运算符 OR (|)
| (或者) — 在两个表达式之间进行逻辑运算 OR。句法:
_/ <exp-1> |<exp-2> /_
例子:
想象一下,我们想从数据输入中获取所有大型商店(超级商店或大型商店)。
-
正则表达式:
/^(super|mega)store/gm
-
输入:
超市
小店
大型商店 -
火柴:
超市
,大型商店
逻辑运算符 NOT (^)
^ (不是) — 在表达式之前进行逻辑运算 NOT。句法:
_/[_ ^<exp> ] _/_
例子:
想象一下,我们想要获取所有不以元音开头的名称。
-
正则表达式:
/^[^AEIOU].*/gm
-
输入:
阿曼达
山姆
约翰
安娜 -
火柴:
山姆
,约翰
花括号({ 和 })
{} (重复) — 允许您检测表达式在 n 次或范围内的重复。句法:
_/ <exp> {最小,最大}/_
例子:
让我们编写一个表达式来获取所有包含 7 个字母并以结尾的单词 nd .
-
正则表达式:
/^.{7}nd*/gm
-
输入:
命令
反弹
芥末
管理人员
入站 -
火柴:
命令
,反弹
,入站
加号 (+)
+(出现 1 次或多次) — 检查左边的字符是否在输入中至少出现一次。句法:
_/ <exp> +/_
例子:
让我们编写一个表达式来获取所有出现的字符“c”。
-
正则表达式:
/a+/gm
-
输入:
音乐
书
技术
成功 -
火柴:
穆斯 **C**
,这 **C** 技术学
,他们是 **抄送** 埃斯
问号 (?)
? (0 或 1 次出现) — 检查左边的字符是否在输入中出现 0 或至少出现一次。使其成为可选。句法:
_/ <exp> ?/_
例子:
想象一下,我们想要获得单数或复数形式的 car,但不要拼错。
-
正则表达式:
/^car[s]?$/gm
-
输入:
车
汽车
卡兹 -
火柴:
车
,汽车
星号 (*)
*(0 次或多次出现) — 检查左边的字符是否在输入中出现 0 次或多次。句法:
_/ <exp> */_
例子:
想象一下,我们想要得到与这个人写的一样多的“y”这个词。
-
正则表达式:
/^嘿*$/gm
-
输入:
嘿
嘿嘿
嘿嘿
嘿嘿 -
火柴:
嘿
,嘿嘿
,嘿嘿
连字符 (-)
- (间隔) — 检查与字符间隔对应的匹配项。句法:
_/[ <start> -<end> ]/_
例子:
想象一下,我们想要获取从字母 A 到 M 的所有名称。
-
正则表达式:
/^[上午].*$/gm
-
输入:
阿曼达
内特
乔
克拉克 -
火柴:
阿曼达
,乔
,克拉克
字母数字和非字母数字(\w 和 \W)
\w(字母数字) — 检查字母数字字符和下划线。句法:
_/\w/_
\W(非字母数字) — 检查非字母数字字符(例如特殊字符)。句法:
_/\W/_
例子:
-
正则表达式:
/\w/gm
-
输入:
测试
1234
测试_123
测试$%测试
$%&*& -
火柴:
测试
,1234
,测试_123
,**测试** $% **测试**
数字和非数字(\d 和 \D)
\d(数字) — 检查代表数字的字符。句法:
_/\d/_
\D(非数字) — 检查非数字字符。句法:
_/\D/_
例子:
-
正则表达式:
/\d/gm
-
输入:
123
测试
测试_123 -
火柴:
123
,测试_ **123**
空格和非空格(\s 和 \S)
\s(空格) — 检查对应于空格的字符(空格、制表符、换行符和回车符)。句法:
_/\s/_
\S(非数字) — 检查非空格字符。句法:
_/\S/_