正则表达式
正则表达式对象
在JavaScript中,正则表达式的对象创建方式有两种,
- 第一种是通过构造函数
RegExp(**pattern: string | RegExp**, flags?: string): RegExp
来完成
- 第二种是使用正则表达式字面量
/ /修饰符
这种方式去完成
var re = new RegExp("ab+c");
var re = /ab+c/;
上面两种方式创建的正则表达式对象是相同的
匹配规则
正则表达式是通过特殊的规则来对字符串进行提取,匹配,验证等操作,在匹配的过程当中它有一系列的规则
一元符
元字符 |
对应说明 |
. |
匹配除换行符之外的任意字符 |
\w |
匹配字母数字下划线,等同于:[a-zA-Z0-9_] |
\s |
匹配任意空白符 |
\d |
匹配数字,等同于[0-9] |
\b |
匹配单词边界 |
| |
或匹配,如 /x|y/ 正则可匹配x或y两个字符 |
^ |
用在[]中,表示非;用在正则式首位,表示以它之后的第一个字符开头 |
$ |
匹配字符串的结束 |
反义字符
反义字符 |
对应说明 |
[^x] |
匹配除“x”之外的所有字符,其中“x”可以为任意字符 |
[^xyz] |
同上,匹配除“x、y、z”之外的任意字符 |
\W |
匹配除了字母、数字、下划线之外的所有字符,等同于:[^\w] |
\S |
匹配除空白符之外的任意字符,等同于:[^\s] |
\B |
匹配不是单词边界的字符,等同于:[^\b] |
\D |
匹配不是数字的所有字符,等同于:[^\d] |
转义字符
转义字符 |
对应说明 |
\xnn |
匹配十六进制数 |
\f |
匹配换页符,等同于:\x0c |
\n |
匹配换行符,等同于:\x0a |
\r |
匹配回车符,等同于:\x0d |
\t |
匹配水平制表符,等同于:\x09 |
\v |
匹配垂直制表符,等同于:\x0b |
\unnnn |
匹配Unicode字符,如:\u00A0 |
重复匹配
匹配字符 |
对应说明 |
* |
等价于{0,} ,重复出现零次或多次 |
+ |
等价于{1,},重复出现一次或多次 |
? |
等价于{0,1},重复出现零次或一次 |
|
重复出现n次 |
|
至少重复出现n次 |
|
重复重现m到n次,其中,m<n |
分组/捕获
分组字符 |
对应说明 |
(exp) |
用小圆括号进行分组,如日期中年月日的分组:/(\d{5})-(\d{1,2})-(\d{1,2})/ 每个分组将产生分组号,从第一个括号开始,可以使用\n的形式在正则中使用分组号, 如匹配成对出现的HTML标签,可以写成:/<(\w+)></\1>/ |
(?:exp) |
匹配exp正则,但不产生分组号 |
(?<!exp2) exp1 |
后顾,匹配exp1,但后面不是exp2 如匹配名字叫xianlie,但不姓zhao的人:/(?<!zhao)xianlie/ |
exp1(?!=exp2) |
后瞻断言,匹配exp1,但后面不能是exp2 如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/ |
贪婪与惰性
相关字符 |
对应说明 |
*? |
重复任意次,但尽可能少的重复 |
+? |
重复一次或多次,但尽可能少的重复 |
?? |
重复零次或一次,但尽可能少的重复 |
{m,n}? |
重复m到n次,但尽可能少的重复 |
{n,}? |
重复n次以上,但尽可能少的重复 |
? |
重复n次,但尽可能少的重复 |
修饰符
修饰符 |
对应说明 |
i |
ignoreCase的缩写,表示忽略字母的大小写 |
m |
multiline的缩写,更改^和的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) |
g |
global的缩写,进行全局匹配,即对字符串进行全文匹配,直到字符串遍历结束 |
正则表达式的使用
正则表达式可以被用于 RegExp
的 exec
和 test
方法以及 String
的 match
、replace
、search
和 split
方法。
使用正则表达式的方法
方法 |
描述 |
exec |
一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。 |
test |
一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。 |
match |
一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。 |
matchAll |
一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)。 |
search |
一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
replace |
一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split |
一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。 |
常见正则表达式案例
正则表达式表单验证实例
function isDecimal(strValue ) {
var objRegExp= /^\d+\.\d+$/;
return objRegExp.test(strValue);
}
function ischina(str) {
var reg=/^[\u4E00-\u9FA5]{2,4}$/;
return reg.test(str);
}
function isStudentNo(str) {
var reg=/^[0-9]{8}$/;
return reg.test(str);
}
function isTelCode(str) {
var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
return reg.test(str);
}
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律