网站首页 > 技术文章 正文
1、正则的创建方式和常用修饰符、元字符
正则:是一个用来处理字符串的规则
a. 正则只能用来处理字符串
b. 处理一般包含两方面:
A:验证当前字符串是否符合某个规则 ——“正则匹配”
B:把一个字符串中符合规则的字符获取到 ——“正则捕获”
(1)创建正则的两种方式:
let reg1 = /^\d+$/g;//=>字面量方式
let reg2 = new RegExp("^\\d+$", "g");//=>构造函数方式
(2)正则两个斜杠之间包起来的都是“元字符”,斜杠后面出现的都是“修饰符”:
let reg = /^\d+$/g;
a. 常用的修饰符
i:ignoreCase 忽略大写小匹配
m:multiline 多行匹配
g:global 全局匹配
b. 常用的元字符
[特殊元字符]
* \d 0~9之间的一个数字
* \D 非0~9之间的任意字符
* \w “数字、字母、下划线”中的任意一个 =>/[0-9a-zA-Z_]/等价于\w
* \s 匹配任意一个空白字符(包括\t制表符[TAB键四个空格])
* \b 匹配边界符 'zhu'(z左边和u右边就是边界) 'zhu-feng'(z左边、u右边、f左边、g右边是边界)
* \n 匹配一个换行符
* \ 转义字符(把一个普通字符转义为特殊的字符,例如:\d,把有特殊含义的转换为普通意思,例如:\. 此处的点就不是任意字符,而是一个小数点)
* . 不仅仅是小数点,代表除了\n以外的任意字符
* ^ 以某个元字符开头
* $ 以某个元字符结尾
* x|y x或者y中的任意一个(a|z...)
* [xyz] x或者y或者z中的任意一个
* [^xyz] 除了x\y\z以外的任意字符
* [a-z] 获取a-z中的任意一个字符([0-9] 等价于\d ...)
* [^a-z] 除了a-z的任意字符
* () 正则分组
* (?:) 当前分组只匹配不捕获
* (?=) 正向预查
* (?!) 负向预查
[量词元字符:让其左边的元字符出现多少次]
* * 出现零到多次
* ? 出现零到一次
* + 出现一到多次
* {n} 出现N次
* {n,} 出现N到多次
* {n,m} 出现N到M次
[普通元字符]
只要在正则中出现的元字符(在基于字面方式创建),除了特殊和有量词意义的以外,其余的都是普通元字符
2、中括号中的细节
(1)中括号中出现的元字符一般都是代表本身含义的
(2)中括号中出现的两位数,不是两位数,而是两个数字中的任意一个
例子:
let reg = /^.+$/;//=>一个正则设置了^和$,那么代表的含义其实就是只能是xxx
console.log(reg.test('n'));//=>true
console.log(reg.test('1'));//=>true
console.log(reg.test('nn'));//=>true
console.log(reg.test('\n'));//=>false
let reg = /^[.]+$/;
console.log(reg.test('n'));//=>false
console.log(reg.test('1'));//=>false
console.log(reg.test('nn'));//=>false
console.log(reg.test('\n'));//=>false
console.log(reg.test('...'));//=>true
let reg = /^[\d]+$/; //=>\d在这里依然是0~9中的一个数字
console.log(reg.test('0'));//=>true
console.log(reg.test('d'));//=>false
let reg = /^[18]$/;//=>不加^和$代表字符串中只要包含xxx即可
console.log(reg.test('18'));//=>false
console.log(reg.test('1'));//=>true
console.log(reg.test('8'));//=>true
let reg = /^[12-65]$/;
console.log(reg.test('13'));//=>false 不是12~65
console.log(reg.test('7'));//=>false 这个正则的意思是 1或者2~6或者5
console.log(reg.test('3.5'));//=>false
编写一个年龄在18~65之间的正则表达式:
* 18~19 1[89]
* 20~59 [2-5]\d
* 60~65 6[0-5]
let reg = /^((1[89])|([2-5]\d)|(6[0-5]))$/;
3、小分组的作用
(1)改变的默认的优先级
(2)分组捕获
(3)分组引用
let reg = /^18|19$/;
console.log(reg.test('18'));//=>true
console.log(reg.test('19'));//=>true
console.log(reg.test('1819'));//=>true
console.log(reg.test('189'));//=>true
console.log(reg.test('181'));//=>true
console.log(reg.test('819'));//=>true
console.log(reg.test('119'));//=>true
reg = /^(18|19)$/;
console.log(reg.test('18'));//=>true
console.log(reg.test('19'));//=>true
console.log(reg.test('1819'));//=>false
console.log(reg.test('189'));//=>false
console.log(reg.test('181'));//=>false
console.log(reg.test('819'));//=>false
console.log(reg.test('119'));//=>false
let reg = /^([a-z])([a-z])\2\1$/;//=>正则中出现的\1代表和第一个分组出现一模一样的内容...
console.log(reg.test('oppo'));
console.log(reg.test('poop'));
4、正则中的exec方法
正则捕获使用的是正则中的EXEC方法
(1)如果可以匹配获取的结果是一个数组,如果不能匹配获取的结果是NULL。
(2)如果我们只在匹配的时候,想要获取大正则中部分信息,我们可以把这部分使用小括号包起来,形成一个分组,这样在捕获的时候,不仅可以把大正匹配的信息捕获到,而且还单独的把小分组匹配的部分信息也捕获到了(分组捕获)。
(3)有时候写小分组不是为了捕获信息,只是为了改变优先级或者进行分组引用,此时我们可以在分组的前面加上“?:”,代表只去匹配,但是不把这个分组内容捕获.
//=>编写一个正则匹配身份证号码
// let reg = /^\d{17}(\d|X)$/;//=>简单:只能匹配是否符合格式,不能提取出身份证中的一些信息
// '130828199012040617'
//=>130828 地域
//=>19901204 出生年月
//=>0617 倒数第二位:奇数=男 偶数=女
let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(?:\d|X)$/;
console.log(reg.exec('130828199012040617'));//=>EXEC实现的是正则捕获,获取的结果是一个数组,如果不匹配获取的结果是null,捕获的时候不仅把大正则匹配的信息捕获到,而且每一个小分组中的内容也捕获到了(分组捕获) : ["130828199012040617", "130828", "1990", "12", "04", "1", index: 0, input: "130828199012040617"]
5、常用正则表达式
(1)有效数字
* a. 正数 负数 零
* b. 小数 整数
* -12.4
* -12
* 12
* 12.4
* 0
* +2
* -2
* +0
* -0
* 0.5
* =====下面两种不行
* 02.4
* 2.
* .5
* 分析规则:
* 1.可以出现+/-号:可以没有,也可以有一个
* 2.整数 0 12 9 : 一位或者多位数字,一位0~9,多位数字不能以0开头
* 3.小数部分:可能有可能没有,有小数点后面至少要跟一位数字
*/
// let reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;
(2)电话(手机)号码
a. 11位数字
b. 以1开头
let reg = /^1\d{10}$/;
(3)中文姓名
a. 中文汉字 [\u4E00-\u9FA5]
b. 尼古拉斯·赵四
let reg = /^[\u4E00-\u9FA5]{2,}(·[\u4E00-\u9FA5]{2,})?$/;
(4)邮箱xxxx@xxx.xx.xx
第一部分:数字、字母、下划线、-、.,但是-和.不能作为开头,不能连续出现-或者.
第二部分:xxx.xx.xx xxx.xx xxx.xx.xx.xx xxx-xxx-xx.xx.xx
/^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
let reg = /^\w+([-.]\w+)*@[A-Za-z0-9]+([-.][A-Za-z0-9]+)*(\.[A-Za-z0-9]+)$/;
- 上一篇: 前端常用终端各种命令
- 下一篇: 前端:FileReader类型之文字读取
猜你喜欢
- 2025-05-23 浅谈3种css技巧——两端对齐
- 2025-05-23 JSONP安全攻防技术
- 2025-05-23 html5学得好不好,看掌握多少标签
- 2025-05-23 Chrome 调试时行号错乱
- 2025-05-23 本文帮你在Unix上玩转C语言
- 2025-05-23 Go 中的安全编码 - 输入验证
- 2025-05-23 31个必备的python字符串方法,建议收藏
- 2024-09-22 正则表达式,这篇看完就够了
- 2024-09-22 web前端布局HTML+CSS
- 2024-09-22 前端网页web开发大神总结的HTML标签-表单元素
你 发表评论:
欢迎- 05-24网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理
- 05-24常见加密方式及Python实现
- 05-24pdf怎么加密
- 05-24aes256 加密 解密 (python3) 「二」
- 05-24深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 05-24Springboot实现对配置文件中的明文密码加密
- 05-24JavaScript常规加密技术
- 05-24信息安全人人平等 谷歌推出低性能安卓手机加密技术
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)