当前位置:网站首页>正则表达式语法及使用
正则表达式语法及使用
2022-07-30 22:01:00 【liuye066】
正则表达式语法:
1、'^'和'$'。
他们的作用是分别指出一个字符串的开始和结束。例子如下:
"^The":表示所有以"The"开始的字符串("There","The cat"等);
"of despair$":表示所以以"of despair"结尾的字符串;
2、'*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。
它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。
"ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;
"ab?":表示一个字符串有一个a后面跟着零个或者一个b;
"a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。
3、你也可以使用范围,用大括号括起,用以表示重复次数的范围。
"ab{2}":表示一个字符串有一个a跟着2个b("abb");
"ab{2,}":表示一个字符串有一个a跟着至少2个b;
"ab{3,5}":表示一个字符串有一个a跟着3到5个b。
注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。
还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。
4、'¦',表示“或”操作
"hi¦hello":表示一个字符串里有"hi"或者"hello";
"(b¦cd)ef":表示"bef"或"cdef";
"(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";
5、'.'可以替代任何字符:
"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);
6、方括号表示某些字符允许在一个字符串中的某一特定位置出现
"[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b");
"[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");
"^[a-zA-Z]":表示一个以字母开头的字符串;
"[0-9]%":表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。
7、也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。
(如:"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。
为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符'\'。
正则表达式修饰符
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
正则表达式模式
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
(x|y) | 查找任何以 | 分隔的选项。 |
元字符
元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找单词字符 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 查找 NUL字符 |
\n | 查找换行符 |
\f | 查找换页符 |
\r | 查找回车符 |
\t | 查找制表符 |
\v | 查找垂直制表符 |
\xxx | 查找以八进制数 xxxx 规定的字符 |
\xdd | 查找以十六进制数 dd 规定的字符 |
\uxxxx | 查找以十六进制 xxxx规定的 Unicode 字符 |
常用的限定符
常用的限定符 | |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
创建正则表达式对象、调用对象的方法
第一种创建方式:
var regExp = /正则表达式/flags;
第二种创建方式:
使用内置支持类RegExpvar regExp = new RegExp("正则表达式","flags");
重复匹配
在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串 |
n* | 匹配任何包含零个或多个 n 的字符串 |
n? | 匹配任何包含零个或一个 n 的字符串 |
n{x} | 匹配包含 x 个 n 的序列的字符串 |
n{x,y} | 匹配包含最少 x 个、最多 y 个 n 的序列的字符串 |
n{x,} | 匹配包含至少 x 个 n 的序列的字符串 |
重复类量词总是出现在它们所作用的字符或子表达式后面。如果想作用于多个字符,需要使用小括号把它们包裹在一起形成一个子表达式。
惰性匹配
重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符。
- ?、{n} 和 {n,m} 重复类具有弱贪婪性,表现为贪婪的有限性。
- *、+ 和 {n,} 重复类具有强贪婪性,表现为贪婪的无限性。
与贪婪匹配相反,惰性匹配将遵循另一种算法:在满足条件的前提下,尽可能少的匹配字符。定义惰性匹配的方法:在重复类量词后面添加问号?限制词。贪婪匹配体现了最大化匹配原则,惰性匹配则体现最小化匹配原则。
常用的表达式:
//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/
//校验用户姓名:只能输入1-30个以字母开头的字串
/^[a-zA-Z]{1,30}$/
//校验密码:只能输入6-20个字母、数字、下划线
/^(\w){6,20}$/
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
//校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”
/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
//校验URL
/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )
[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
//邮箱地址
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
身份证号(15位、18位数字):^\d{15}|\d{18}$
1、日期格式:^\d{4}-\d{1,2}-\d{1,2}
2. 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
3. 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
如果匹配任意 ASCII字符:
var r = /[\u0000-\u00ff]/g;
如果匹配任意双字节的汉字:
var r = /[^\u0000-\u00ff]/g;
如果匹配任意大小写字母和数字:
var r = /[a-zA-Z0-9]/g;
使用 Unicode 编码设计,匹配数字:
var r = /[\u0030-\u0039]/g;
参考:
JS正则表达式语法大全(非常详细)
边栏推荐
- The reason for not using bs4 is that the name is too long?Crawl lottery lottery information
- 系统结构考点之多级混洗交换网络
- ClickHouse 创建数据库建表视图字典 SQL
- 3分钟带你了解微信小程序开发
- 牛客小白月赛53 A-E
- Knowledge of C language corners of byte alignment
- Google Earth Engine ——我们如何筛选一个列表中的排序以时间为例
- ClickHouse 数据插入、更新与删除操作 SQL
- Navigation Bar----Personal Center Dropdown
- 类似 MS Project 的项目管理工具有哪些
猜你喜欢
随机推荐
ELF: Loading process
【零代码工具】15 款企业级零代码开发平台推荐,总有一款是你心仪的
类和对象——上
cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
Difference between cookie and session
openim支持十万超级大群
JS中获取元素属性的8大方法
MySQL cursors
When Navicat connects to MySQL, it pops up: 1045: Access denied for user 'root'@'localhost'
c语言进阶篇:指针(五)
Detailed explanation of the delete problem of ClickHouse delete data
解决centos8 MySQL密码问题ERROR 1820 (HY000) You must reset your password using ALTER USER
Collapse legacy apps
MySQL Soul 16 Questions, How Many Questions Can You Last?
JUC原子类详解
解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead
DistSQL 深度解析:打造动态化的分布式数据库
Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’
活动推荐 | 2022年深圳最值得参加的边缘计算活动
Google Earth Engine ——