正则又名正则表达式
正则表达式(也称为“正则”)是有助于搜索,匹配或替换字符串中字符组合的模式。他们真的很强大,很难同时阅读。许多开发人员只是决定在他们的学习路径中跳过这一部分,并通过搜索搜索或从堆栈溢出中复制/粘贴已经准备好的正则表达式。
您应该牢记以下事实:正则语法在不同的编程语言之间有所不同。您可以在下面
查找将无缝用于JavaScript的示例 - 对于Python或PHP,语法可能需要一些调整。
基本
要在字符串That’s what she said.
中找到she
词,您只需使用以下正则表达式:/she/
。
在JavaScript中,与字符串方法集成在一起。要查找Regex是否匹配字符串,您可以
返回true
或false
的.test()
方法。
let michaelScott = "That's what she said.";
let regex = /she/;
regex.test(michealScott) // true
让我们学习一些基本操作员:
- 选择任何角色,包括特殊的电荷和空间,使用时期
.
:
let str = "abcABC012 .:!?"
let regex = /./g // array of matches: a,b,c,A,B,C,0,1,2, ,.,:,!,?
- 在字符串开始时选择字符使用caret sign
^
:
let str = "abcdef"
let regex1 = /^abc/ // array of matches: a,b,c
let regex2 = /^def/ // no matches
- 在字符串末尾选择字符使用美元符号
$
:
let string = "abcdef"
let regex1 = /abc$/ // no matches
let regex2 = /def$/ // array of matches: d,e,f
// you can combine two of those:
let regex1 = /^abc$/
- 选择至少一个定义的字符添加
+
let string = "abc bc aaabc"
let regex = /a+/g // array of matches: a,aaa
- 指定我们需要多少个字符,我们可以使用量词
{n}
。您可以定义确切的计数:{2}
或{2,4)
的范围匹配2-4次:
let string = "12 3456"
let regex1 = /\d{4}/ // array of matches: 3456
let regex2 = /\d{2,4}/g // array of matches: 12,3456
查找字母,数字等
- 选择字母
a-z, A-Z
,数字0-9
和下划线_
字符使用\w
。找到除这些的炭子 使用\W
:
let string = "abcABC123 _.:!?"
let regex1 = /\w/g // array of matches: a,b,c,A,B,C,1,2,3,_
let regex2 = /\W/g // array of matches: ,.,:,!,?
- 缩小我们的搜索范围并仅找到数字字符
\d
和其他所有内容kude19:
let string = "abcABC123 _.:!?"
let regex1 = /\d/g // array of matches: 1,2,3
let regex2 = /\D/g // array of matches: a,b,c,A,B,C, ,_,.,:,!,?
- 您还可以使用
\s
选择空间字符:
let string = "abcABC123 _.:!?"
let regex1 = /\s/g // array of matches: " "
let regex2 = /\S/g // array of matches: a,b,c,A,B,C,1,2,3,_,.,:,!,?
- 也可以选择新的行字符
\n
或tabulator\t
角色集和范围
您可以在Square Brackets [...]
中搜索任何字符。
let string = "mop hop top cop"
let regex = /[mtc]op/g // array of matches: mop,top,cop
使用caret ^
允许否定定义的字符集:
let string = "mop hop top cop"
let regex = /[^mt]op/g // array of matches: hop,cop
通过定义起始字母和结尾字母,您可以在指定范围内找到字母:
let string = "abcdefghijklmnopq"
let regex = /[d-i]/g // array of matches: d,e,f,g,h,i
// and the same with numbers
let string = "0123456789"
let regex = /[2-7]/g // array of matches: 2,3,4,5,6,7
对于某些字符集,有相应的字符类:\
几乎相同
\w
与[a-zA-Z0-9_]
\
相同\d
与[0-9]
\
相同\s
与[\t\n\v\f\r ]
分组
我们可以将模式分组以将比赛的一部分作为结果数组中的单独项目:
let string = "First name: John, Last name: Doe"
let reges = /First name: (\w+), Last name: (\w+)/g
管道字符|
允许指定表达式可以在不同的表达式中。让我们上一个示例:
let string = "mop hop top cop"
let regex = /(m|t|c)op/g // array of matches: mop,top,cop
标志
有6个标志会影响JavaScript的正则搜索,但只有3个使用最多的标志:
-
i
-案例不敏感:Z
和z
之间没有区别 -
g
-global:使用此标志,搜索返回所有可能的匹配,没有此标志,只有第一个匹配返回 -
m
-多行:它影响^
和$
的行为,在多行模式下,匹配也在行的开头或结尾
实际例子
电话号码
let regex = /\d{3}(-| )\d{3}(-| )\d{3}/
let phoneNumber1 = "123-123-123" // ✅
let phoneNumber2 = "123 123 123" // ✅
let phoneNumber3 = "123123123" // ❌
let phoneNumber4 = "(123) 123 1234" // ❌
URL
let regex = /^(https?):\/\/[^\s].[^\s]*/
let url1 = "https://www.google.com/" // ✅
let url2 = "http://www.twitter.com/" // ✅
let url3 = "https://nikolasbarwicki.com" // ✅
let url4 = "www.google.com/" // ❌
let url5 = "google.com/" // ❌
电子邮件地址
let regex = /([a-zA-Z0-9-_.]+)@([a-zA-Z+]).(.+)/
let email1 = "john_10@gmail.com" // ✅
let email2 = "john-doe-10@stanford.edu.com" // ✅
let email3 = "John.Doe@mop.co.uk" // ✅
let email4 = "johndoegmail.com" // ❌
概括
我真的相信,当需要理解正则表达式时,本文足以满足90%的案例。
非常感谢您的阅读和快乐学习! ð¥s