正则表达式 101
嘿,读者们👋🏻,在这个博客中我们将要讨论Regular Expressions
或者我们也可以称之为REGEX
。
REGEX
是具有特定模式的字符序列,这些模式可以帮助我们find
或find and replace
或validate
诸如此类的事情email, passwords and usernames
。
让我们开始学习🐱🏍:
基础知识:
用一个例子来解释最简单的方法regex
是:
JavaScript
我们想在字符串中搜索这个单词。
现在这个例子非常基础,但相信我,REGEX
它有很多很多的用例。
多个可能的字符:
让我们看一个例子,您想看看字符串是否包含许多可能性,例如,如果您想搜索dog
或cat
。
我们可以使用符号来做到这|
一点OR
。
这里如果petString
包含,Shreyas loves JavaScript
那么输出将是false
。
需要明确的是,REGEX 模式区分大小写,因此如果字符串包含shreyas
并且我搜索,ShreyaS
则输出将是false
。
区分大小写:
当我们不确定大小写时该怎么办?别担心!我们可以让 REGEX 模式忽略大小写。
正如您所见,我们已经使用了i
,regex1
并且有许多这样的标志,它们使我们能够对模式进行很多控制。
i
代表irrespective of the case
。
这里我们使用.test()
方法,它是 JavaScript 中的内置方法,它根据输入的模式返回 true 或 false。
语法是pattern.test(String-which-has-to-be-tested)
。
全局搜索:
.test()
有一个缺点,那就是它只返回 true 或 false,如果为 true 它不会告诉我们模式匹配了多少次,所以为了弥补这个缺点,JS 有另一个内置方法称为 as ,.match()
它让我们知道模式在字符串中匹配了多少次。
.match()
返回成功匹配模式的结果数组,数组的长度是识别模式的时间。
让我举个例子👇🏻:
这里你可以看到,的语法.match()
与.test()
.match()
的语法是:string.match(regex-pattern);
您还可以看到我使用了另一个标志,即,g
它代表global
,它可以帮助我们在字符串中全局找到完美匹配。
查找字母组:
我们可以将多个字母组合在一起,以便在字符串中找到它们。REGEX 为我们提供了灵活性Character Classes
,它允许我们定义一组字符,并且它们必须用[ ]
方括号括起来。
当你看到一个例子时,你会更清楚。
We have to find every vowel inside a string.
👇🏻
该模式有 2 个标志,不区分大小写并在字符串中进行全局检查。
这里[aeiou]
元音被分组在一起并在字符串中单独搜索。
使用通配符句点/点匹配任何内容:
有时我们只需要搜索以某些特定字母结尾或以某些特定字母开头的单词。为此,我们使用通配符“句点”,它本质上是一个.
句点/点。
如果我们必须匹配以字母un
. 结尾的单词,例如fun
或run
或sun
。
为此我们有👇🏻
此模式将检查以 un 结尾的任何单词,并且将不考虑大小写(i
标志)并在整个字符串(标志)中搜索g
。
字符范围:
我们还可以提供一系列字符以供检查。
例如:如果您确定单词可能以任何字符开头但以字母结尾at
,那么我们可以给出一个字符范围来检查字符串,如果匹配则返回一个数组。
注意: 如果没有找到值,则会返回 NULL!
比赛号码:
如果你想匹配数字怎么办?别担心,REGEX 可以帮你搞定!
就像字符我们可以写一样/[0-9]/g
,就是这样,所有数字都被覆盖了。
但众所周知,我们开发者……很懒💤!既然/[0-9]/
都能写,那还有什么必要写呢?/[\d]/g
这d
代表着数字!
匹配数字和字符:
为了匹配数字和字符,我们可以写👇🏻
但是这个 REGEX 模式是不是太长了?我们有一个简写方法,就是/\w/g
你可以直接写出简写部分,而不用写完整的 REGEX 模式。
检查最小和最大字符数:
我们可以设置最小字符数和最大字符数。
此 REGEX 模式仅允许长度等于或大于 5 且小于或等于 10 的字符串。
其语法是/[regex here]{min-number, max-number}/g
。
挑战🎯:
我想向所有读者提出一个快速挑战,为什么不制作一个验证用户名的正则表达式,条件是:
- 用户名应该包含数字。
- 用户名可以有下划线。
- 用户名不应包含任何特殊字符。
- 用户名至少应为 5 个字符,最多为 15 个字符。
非常感谢您阅读整篇博客🎉,如果您喜欢,请与您的朋友分享,并在您即将开展的项目中实现 REGEX!它让我免于编写大量代码,也节省了大量时间,我相信它对您来说也会非常有效!
直到下一篇博客...再见👋🏻!!
鏂囩珷鏉ユ簮锛�https://dev.to/shreyazz/regex-101-2m7m