您唯一需要的 RegEx 指南
您唯一需要的 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/_
捕获和非捕获组(“()”和“(?😃”)
()(捕获组) — 对要捕获的字符序列进行分组。使用此元字符时会产生子匹配。句法:
_/( <characters> )/_
(?😃(非捕获组) — 对不应捕获的字符序列进行分组。句法:
_/(?: <characters> )/_
如何在 Javascript 中使用正则表达式?
在 Javascript 中,正则表达式是 RegExp 类的对象。我们可以用两种方式定义它:
字面形式:
常量 myExpression = /test/;
使用 RegExp 构造函数:
const myExpression = new RegExp('test');
然后,我们可以开始使用我们的表达式,假设我们想在一个字符串中找到一个匹配项:
常量 newRE = /d(b+)d/g;
常量匹配 = newRE.exec('cdbbdbsbz');
正则表达式方法
创建正则表达式后,我们可以使用一些方法,以下是其中的一些:
-
执行() — **** 在字符串中搜索匹配并返回结果数组
const myExp = RegExp('foo*', 'g');
myExp.exec('桌上足球,桌上足球'); -
测试() — 在字符串中搜索匹配并返回
真的
或者错误的
const str = '桌上足球';
const regex = new RegExp('foo*'); 正则表达式.test(str); // 真的 -
匹配() — 在字符串中搜索匹配项并返回结果数组
const 段落 = '这只敏捷的棕色狐狸被命名为玛丽。';
常量正则表达式 = /[AZ]/g;
const found = paragraph.match(regex); 控制台.log(找到); // 数组 ["T", "M"] -
搜索() — 搜索正则表达式之间的匹配并返回匹配的索引
const 段落 = '这只敏捷的棕色狐狸跳过了懒惰的狗。如果狗吠,它真的很懒吗? // 任何不是单词字符或空格的字符
常量正则表达式 = /[^\w\s]/g; console.log(paragraph.search(regex)); // 43 -
代替() — 返回一个新字符串,其中一个、部分或所有匹配的模式被替换
const text = '敏捷的棕色狐狸跳过懒狗。如果狗有反应,它真的很懒吗? 常量正则表达式 = /Dog/i;
console.log(text.replace(regex, 'ferret'));
// “敏捷的棕狐跳过了懒惰的雪貂。如果狗有反应,那真的是懒惰吗?”
最常用的正则表达式备忘单
-
电子邮件
[a-zA-Z0-9.!#$%&'*+/=?_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA- Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0 ,61}[a-zA-Z0-9])?)*$
-
电子邮件(但仅限 Gmail 和 Hotmail)
^([\w-.][email protected](?!gmail.com)(?!hotmail.com)([\w- ]+.)+[\w-]{2,4})? $
-
网址
^(?:http(s)?😕/)?[\w.-]+(?:.[\w.-]+)+[\w-._~:/? #[]@!$&'()*+,;=.]+$
-
电话和手机号码
((?([\d -)\–+/(]+))?([ .-–/]?)([\d]+))
-
修剪字符串
[1](.?)[\s]*$
-
IP地址
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0 -4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01] ?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]? )$
-
用户名(1-15 个字母数字字符)
^(?=.[a-zA-Z]{1,})(?=.[\d]{0,})[a-zA-Z0-9]{1,15}$
结论
这就是今天的内容。这是一篇很长的文章,但我真的希望这篇文章对您使用 RegEx 有所帮助,并且您将来可以在编写新表达式时将其用作指南。
谢谢阅读!在本平台关注我,阅读更多开发内容。祝你有美好的一天,很快再见!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/20718/39060700
\s ↩︎