目录
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式 ,用于描述要匹配的文本字符组合模式
正则表达式是一种通用的模式,在js里一般用作验证表单:
用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)
过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
正则表达式的语法
定义
定义正则表达式的语法,//内部是正则表达式的字面量
javascript
const reg=/兔子/
检测
使用test()方法:查看正则表达式与指定的字符串是否匹配
javascript
const str='我有三只小兔子'
//定义正则表达式
const reg=/兔子/
//是否匹配
console.log(reg.test(str));
匹配上了返回true,没匹配上返回false
reg是正则表达式的对象,test()是reg对象的方法,而定义的正则表达式就相当于一套规则
在实际使用中我们要先有一套规则,再进行检验
检索
除了test()还有一个方法
exec()方法:在一个指定字符串中执行一个搜索匹配
javascript
const str='我有三只小兔子,分别是阿米娅兔兔,特雷西娅兔兔,德克萨斯兔兔'
//定义正则表达式
const reg=/兔兔/
//是否匹配
console.log(reg.exec(str));
如果匹配成功,exec() 方法返回一个数组,否则返回null

其中的index表示数组的下标14的位置上匹配成功
返回值不同是test()和exec()最大的区别
元字符
普通的字符只能描述他们本身,而元字符是一些具有特殊意义的字符,可以匹配一类字符,例如普通字符里想表示26个英文字母,需要abcdefg......一个一个写出来,但是元字符可以用[a-z]来表示这些字符
极大提高了灵活性和强大的匹配功能。
参考文档:MDN:https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Guide/Regular_Expressions
正则表达式的测试工具: http://tool.oschina.net/regex
元字符太多了,所以我们对它做出分类,分别是边界符、量词、字符类
边界符
表示字符的位置,必须以某某字符开头、结尾等格式要求

第一个true:str里含有gigity
第二个和第三个的true是因为str以gigity开头/结尾
如果想要精确匹配:
javascript
//以某一字符开头,以某一字符结尾
console.log(/^gigity$/.test(str))
答案为什么是false?

当我们确定字符串的^和$(也就是开头和结尾),你们这个开头和结尾必须是同一个字符
也就是说只有这种情况才为true:
javascript
//和正则表达式里面的字符一模一样才是true
console.log(/^gigity$/.test('gigity'))/'/true
欸,那你就要问了(谁问你了)怎么表示多个重复字符的正则表达式字面量呢?所以我们要学:
量词
表示字符的重复次数,设定某个模式出现的次数

*:
javascript
const str = 'ygigitygigitygigitygigity'
console.log(/^gigity*$/.test(str));//false
console.log(/y*$/.test(str));//true
为什么第一个是false?第二个是true?
首先,在字符后面加【*】则这个字符只作用于该字符正前方的字符也就是【y】,那么这句正则表达式的意思就变成了【匹配的是以 "gigity" 开头,后面可以跟 0 个或多个 y
的字符串】,而该字符不满足这个规则,所以false
所以根据这个规则,我们写成第二种形式的意思是【含0个或多个y并且以y结尾的字符串】,str满足条件,所以true
如果你想匹配多个 "gigity" 的重复,可以使用 /^(gigity)+$/
:
javascript
const str = 'gigitygigitygigitygigity';
console.log(/^(gigity)+$/.test(str)); // true
当然如果我们写成这样:
javascript
console.log(/^y*$/.test(str));
就false了,因为这样的写法要求【字符串里只能有0或0个以上的y】
+:
改为+也很好理解,至少有一个【y】
javascript
const str = 'ygigitygigitygigitygigity'
console.log(/^gigity+$/.test(str));//false
console.log(/y+$/.test(str));//true
?:
只有出现0和1次为true,其余都为false
javascript
const str = 'ygigitygigitygigitygigity'
console.log(/^gigity?$/.test(str));//false
console.log(/y?$/.test(str));//true
当然,以上三种量词也可以辨别空白:
javascript
console.log(/^y*$/.test(''));//true
console.log(/^y+$/.test(''));//false
console.log(/^y?$/.test(''));//true
还可以设置固定字符出现的次数:只有只出现四个【y】时为true
javascript
console.log(/^y{3}$/.test(''));//false
console.log(/^y{3}$/.test('y'));//false
console.log(/^y{3}$/.test('yy'));//false
console.log(/^y{3}$/.test('yyy'));//true
可以用作判别手机号、验证码、身份证号码输入的位数是否正确
大于等于3即为true:
javascript
console.log(/^y{3,}$/.test('yy'));//false
console.log(/^y{3,}$/.test('yyy'));//true
console.log(/^y{3,}$/.test('yyyy'));//true
console.log(/^y{3,}$/.test('yyyyy'));//true
大于等于三,小于等于4即为true(注意{n,m}【,】左右两边没有空格):
javascript
console.log(/^y{3,4}$/.test('yy'));//false
console.log(/^y{3,4}$/.test('yyy'));//true
console.log(/^y{3,4}$/.test('yyyy'));//true
console.log(/^y{3,4}$/.test('yyyyy'));//false
字符类
类似于[a-z]等表示一类字符的元字符,\d表示0~9(其实我在学makefile的时候就没觉得正则表达式方便到哪去)
\]匹配字符集合,后面的字符串只要包含abc中的任意一个字符,都返回true:  当判定为【字符串里含a/b/c里的一个以上】的时候会判定为false,但是用上量词,就会变为true: 使用连字符表示一个范围: > Ø \[a-z\] 表示 a 到 z 26个英文字母都可以 > > Ø \[a-zA-Z\] 表示大小写都可以 > > Ø \[0-9\] 表示 0\~9 的数字都可以 比如:  > 1、在\[\]内加\^符表示取反,和\[\]内的字符取反,\[\^abc\]表示【abc之外的所有其他字符】 > > 2、【.】匹配除了换行符的任何单个字符 > > 3、预定义类: 某些常见模式的简写方式。 > >   #### 表单判断案例 ```html