「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
大家好,我是 摸鱼小公举,一个不想摸鱼的公举,期待着有一天能够咸鱼翻身。上一篇文章是 CSS flex 弹性布局详解 总结了git常用的命令,今天我们以一起学习一下正则表达式。首先声明一下这是我从CSDN博客自己账号里搬过来的文章,说实在此篇文章是我犹豫了许久才觉得搬过来的。
正则表达式的介绍
(1)数据类型:
基本数据类型: number string boolean null undefined
复杂数据类型: Array Function Object Math Date RegExp正则表达式) String Number Boolean
(2)Regular Expression 简写: RegExp RegEx
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
(3)正则对象的test()方法
语法: 正则对象.test(需要检测/过滤的字符串);
返回值布尔类型。如果 需要检测/过滤的字符串 满足当前这个正则对象的过来规则,那么就返回true,否则就返回false.
(4)如何创建正则对象?
(1)使用构造函数来创建
var reg1 = new RegExp(/男/); //这个正则用来判断你 需要检测的字符串里面包含不包含男这个字.
var result = reg1.test('志强是女的吗?是的');
console.log(result);
(2)使用正则字面量来创建. /内容/
var reg2 = /男|女/;
var result = reg2.test('志强是nan的吗?是的');
console.log(result);
console.log(/男|女/.test('志强是男的吗?是的'));
预定义类-就是事先给他赋予了一些含义的字符
- . [^\n\r] 除了换行和回车之外的任意字符 -----意思是含有\n\r 都是false
- \d [0-9] 数字字符 [0123456789] ------含有数字的都是true
- \D [^0-9] 非数字字符 -----含有非数字字符的都是false
- \s [\f\r\n\t\v] 不可见字符 -----含有 \r回车,\n 换行," " 空格,注意""空字符串不是不可见字符,\t
- \S [^\f\r\n\t\v] 可见字符 -----只要含有不可见字符\f\r\n\t\v就是false
- \w [a-zA-Z0-9_] 单词字符(所有的字母数字和_) -----只要含有字母和数字和_都是true
- \W [^a-zA-Z0-9_] 非单词字符 ----- 要含有字母和数字和_都是false
console.log(/./.test("[^\n\r]"));//true 意思是含有\n\r 都是false
console.log(/\d/.test("[0-9]"));//true
自定义类
你用test检测的字符串里面,有没有包含d这个字母。如果有就是true.
console.log(/d/.test("123")); //false
console.log(/d/.test("123d")); //true
你用test检测的字符串里面, 有没有包含maoru,,如果有就是true.
console.log(/maoru/.test("mao")); //false
或和优先级 | ()
用test检测的字符串里面,如果有mao或者有ru都是true.
console.log(/mao|ru/.test("mao")); //true
console.log(/mao|ru/mao.test("ru")); //true
console.log(/mao|ru/.test("maoru")); //true
用test检测的字符串里面,如果有maou,或者maru,那么就是true.
console.log(/ma(o|r)u/.test("maoru")); //false
console.log(/ma(o|r)u/.test("maou")); //true
console.log(/ma(o|r)u/.test("maru")); //true
console.log(/ma(o|r)u/.test("maorumaoru")); //false
console.log(/ma(o|r)u/.test("mumummumumaru")); //true
简单类 []
简单类只代表一个字符
如果用test检测的字符串中,出现[]中的字符任意一个,就是true.
console.log(/[abc]/.test("a")); //true
console.log(/[abc]/.test("b")); //true
console.log(/[abc]/i.test("dddddBdddd!!!!!!")); //true
负向类 [^ ]
注意:负向类是中括号中的小尖尖.
//如果用test检测的字符串中,有 除了中括号中的内容之外的任意一个,出现一次或者一次以上,就是true
// console.log(/[^abc]/.test('a')); //false
范围类
[]他是一个简单类,简单类代表的是一个字符,如果检测的字符串中,出现了中括号中的任何一个,都是true
console.log(/[abc]/.test("a")); //true
自定义类黑范围类结合
自定义类 - 检测的字符串里面 至少要完整的出现一次,那么就是true. yaz ybz ycz
console.log(/y[abc]z/.test("yabcz")); //false
console.log(/y[abc]z/.test("yazcz")); //true
组合类
console.log(/[^0-5][^a-g]/.test("b4")); //true
console.log(/[^0-5][^a-g]/.test("6")); //false
负向类 [^ ] -----/^ / 边界
- ^ 会匹配行或者字符串的起始位置
console.log(/^\d/.test("aaabb123ccc")); //false
如果检测的字符串的起始位置是数字就是true.
2, $ 会匹配行或字符串的结尾位置
console.log(/ac$/.test("777ac")); //true
3,^$组合在一起,就表示严格匹配 只能出现一次 有且只有一次
console.log(/^男$/.test('男'));//true
console.log(/^男$/.test('男男'));//false 只能有一次
console.log(/^bc/.test("bcbcbc")); //true 没有结尾不算严格匹配
console.log(/bc$/.test("bcbcbc")); //true 没有开头不算严格匹配
量词
"*" 重复零次或更多 x>=0 {0,}
"+" 重复一次或更多次 x>=1 {1,}
"?" 重复零次或一次 x=(0||1) {0,1}
console.log(/^colo*r$/.test("colr")); //true
console.log(/^colo*r$/.test("color")); //true
console.log(/^colo*r$/.test("coloor")); //true
console.log(/^colo+r$/.test("colr")); //false
console.log(/^colo+r$/.test("color")); //true
console.log(/^colo+r$/.test("coloor")); //true
console.log(/^colo?r$/.test("colr")); //true
console.log(/^colo?r$/.test("color")); //true
console.log(/^colo?r$/.test("coloor")); //false
{n} n次 x=n
{n,} 重复n次或更多 x>=n
{n,m} 重复出现的次数比n多但比m少 n<=x<=m
console.log(/^colo{2}r$/.test("color"));//false
console.log(/^colo{2}r$/.test("coloor"));//true
console.log(/^colo{2,}r$/.test("color"));//false
console.log(/^colo{2,}r$/.test("coloor"));//true
console.log(/^colo{2,}r$/.test("colooor"));//true
console.log(/^colo{2,3}r$/.test("coloor"));//true
console.log(/^colo{2,3}r$/.test("colooor"));//true
分组提取 / 仅作了解
//提取email中的每一部分
var str = "123123@xx.com.cn,penglin@qq.com.cn";
var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/g;
var array = str.match(reg);
//获取分组的数据 ()是分组
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
console.log(RegExp.$4);
结语
好了文章到这里就结束了,这篇文章好像不那么方便大家使用,下次我出一篇,正则校验手机号,邮箱等内容的文章。欢迎大家( 点赞+评论+关注 ) 有问题可以来互相交流一下;今天是我参与2022首次更文挑战的第3天,加油!