定义
正则表达式是一种用于描述字符串模式的工具。通过使用正则表达式,我们可以定义一个模式,然后用来匹配、搜索或替换文本中符合该模式的部分。
比如说,在用户创建用户名中,如果我们想要验证输入的用户名是否为大小写字母+数字+特殊符号+大于6位,则此时可以使用正则表达式。
本文介绍JavaScript中的正则表达式RegExp,所用工具:https://regex101.com/
特殊字符
在正则表达式中,特殊字符是用来表示匹配规则或者控制匹配行为的字符。这些特殊字符通常具有特定的含义,用于执行特定的操作。
“.”(句点): 匹配任何单个字符,除了换行符(\n \r)。
“^”(脱字符): 匹配输入字符串的开始位置。
仅匹配ice1开头:
“$”(美元符号): 匹配输入字符串的结束位置。
强匹配ice1开头,ice1结尾:
“*”(星号): 匹配前面的字符零次或多次。
ice*a 可以匹配 ica icea iceea
匹配一个正整数,第一个数字不是0,后面的数字有任意个:
[1-9][0-9]*
“+”(加号): 匹配前面的字符一次或多次。
ice+a 可以匹配 icea iceea iceeea
c+e 可以匹配 ce cce
“?”(问号): 匹配前面的字符零次或一次。
ice?a 可以匹配 ica icea
“[]”(字符集合): 匹配方括号内的任何字符。可以使用连字符 “-” 表示字符范围。
[abc] 代表匹配字符串iassvhibfac中的所有a b c字符
“()”(圆括号): 用于创建捕获组,可以将匹配的内容保存起来供后续使用。
匹配以一个数字开头多个字母结尾的内容:
“|”(竖线): 表示“或”操作,用于在多个模式之间选择一个匹配。
匹配以一个数字开头多个字母结尾的内容或以一个字母开头一个数字结尾的内容:
“\”(反斜线): 用于转义下一个字符,使其失去特殊意义。例如,"."表示匹配句点字符,而不是任意字符。
匹配特殊字符时需进行转义:
“{n}”: 匹配前面的字符恰好重复 n 次。例如,“a{3}” 匹配 “aaa”。
“{n,}”: 匹配前面的字符至少重复 n 次。例如,“a{2,}” 匹配 “aa”、“aaa”、“aaaa” 等。
“{n,m}”: 匹配前面的字符重复 n 到 m 次。例如,“a{2,4}” 匹配 “aa”、“aaa”、“aaaa”。
从以上的例子可以看出,这些特殊字符可以单独使用,也可以与其他字符组合在一起,以构建更复杂的匹配模式。
这里再多举几个例子:
*加.实现从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容:
<.*?> 用于匹配最短的、非贪婪的以 < 开始、> 结束的字符串片段,通常用于匹配 HTML 或 XML 标签中的内容。
元字符
除了特殊字符外,正则表达式中还可以使用一些元字符、字符类、量词和定位符等来构建模式。(某些字符既可以是特色字符,也可以是其它字符等)
元字符是具有特殊含义的字符,它们用于构建正则表达式的基本模式。一些常见的元字符包括:.、^、$、\、|、[]、{}、() 等。
[]:字符类,用于匹配字符集合中的任意一个字符。例如,[abc] 匹配 a、b 或 c 中的任意一个。
[A-Z]代表匹配所有大写字母,[a-z] 代表匹配所有小写字母。
[\s\S] 代表匹配所有,\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
{}:量词,用于指定匹配模式的重复次数。例如,a{2,4} 匹配连续出现 2 到 4 次的字符 a。
如果想设置 00~99 的两位数(至少1位,至多2位),可以写为如下形式:
[0-9]{1,2}
匹配 1~99 的正整数:
[1-9][0-9]{0,1}或[1-9][0-9]?
\b:单词边界,匹配单词的边界位置。
\B:非单词边界,匹配不是单词边界的位置。
\w 代表匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
<\w>用于匹配含有一个字母、数字、下划线的标签<>
<\w+>用于匹配至少含有一个字母、数字、下划线的<>
注意:这里没匹配到的原因是因为/w不能匹配斜杠
注意: 在字符集 [ ] 中,^ 具有特殊的含义,它用于表示取反操作,即匹配不在字符集内的字符。
例如,[^abc] 匹配任何一个不是 a、b 或 c 的字符
特殊结构
exp1(?=exp2):查找 exp2 前面的 exp1。
例如,ice(?=[\d+])匹配数字前面的ice字符串:
(?<=exp2)exp1:查找 exp2 后面的 exp1。
例如,(?<=[0-9])ice匹配数字后面的ice字符串:
exp1(?!exp2):查找后面不是 exp2 的 exp1。
例如,ice(?![0-9]+)匹配ice字符串,但ice字符串的后面不是数字:
(?
例如,(?
(exp)?:指示括号内的内容可选,即该内容可以出现零次或一次。
例如,ice(es)? 可以匹配 ice 、 iceasd 中的 ice 和icees中的 icees:
g修饰符实例:
i 修饰符为不区分大小写匹配,实例(不区分大小写+全局匹配):