什么是正则表达式? 对字符串内容进行格式和内容的验证,所有的计算机语言,正则表达式都是相同的通用的
正则表达式的基本语法
①字面量(常用),使用 // 来包裹表达式内容,var 变量 = /正则表达式/
②构造函数,var 变量 = RegExt(‘正则表达式’);
正则表达式的使用方法
①验证:
判断字符串内容是否符合正则表达式的规范
执行结果是 布尔类型
语法 : 正则表达式.test(‘字符串内容’);
②捕获:
捕获获取字符串中符合正则表达式规范的内容
执行结果是捕获获取到的符合规范的字符串内容
语法 : 正则表达式.exec(‘字符串内容’)
常用语法规范:正则表达式中不要随便写空格,空格也会作为验证格式的一部分
元字符: 使用一些符号来表示规范
\d
表示数字
\D
表示非数字
\w
表示数字,字母,下划线
\W
表示非数字,字母,下划线
\s
表示空格
\S
表示非空格
.
表示非换行,字符串中的换行使用转义符 \n 表示
正则表达式和转义符都是 \内容的形式,JavaScript会自动识别。如果是 \内容,符合正则表达式就按照正则表达式来执行,符合转义符就按照转义符的形式执行。正则表达式和转义符是不会冲突的
// 只要有数字即可,不用都是数字
var reg1 = /\d/ ;
console.log(reg1.test('123456')) ;
console.log(reg1.test('abcd')) ;
console.log(reg1.test('1234abcd')) ;
// 只要没有数字,就是true
var reg2 = /\D/;
console.log(reg2.test('123456')) ;
console.log(reg2.test('abcd')) ;
console.log(reg2.test('1234abcd')) ;
var reg3 = /\w/;
console.log( reg3.test('123avbc_') );
console.log( reg3.test('!@#$%^') );
console.log( reg3.test('1234!@#$%^') );
var reg4 = /\W/;
console.log( reg4.test('123avbc_') );
console.log( reg4.test('!@#$%^') );
console.log( reg4.test('1234!@#$%^') );
var reg5 = /\s/;
console.log( reg5.test(' ') );
console.log( reg5.test('312斤kfjisa') );
console.log( reg5.test('312斤 kfjisa') );
var reg6 = /\S/;
console.log( reg6.test(' ') );
console.log( reg6.test('312斤kfjisa') );
console.log( reg6.test('312斤 kfjisa') );
var reg7 = /./;
console.log( reg7.test('\n') );
边界符:^
表示开头,$
表示结尾
// 以数字开头即可,之后的内容不做限定
var reg1 = /^\d/;
console.log(reg1.test('123'));
console.log(reg1.test('123abc'));
console.log(reg1.test('abc123'));
// 以数字结尾就看结尾,之前有什么内容不管
var reg2 = /\d$/;
console.log(reg2.test('123'));
console.log(reg2.test('123abc'));
console.log(reg2.test('abc123'));
// 如果开头结尾都加上了,限定效果就不同了。只能有一个字符串,并且这个字符是数字,只能有一个数字字符。字符个数、内容不符合都不行
var reg3 = /^\d$/;
console.log(reg3.test('1')); //这个是true,只有1个数字字符
console.log(reg3.test('-1'));
console.log(reg3.test('a'));
console.log(reg3.test('123'));
console.log(reg3.test('123abc'));
console.log(reg3.test('abc123'));
console.log(reg3.test('123abc123'));
限定符:限定出现次数, 一般都要和边界符配合使用,否则执行效果有问题
*
表示允许的次数是0至正无穷次,有没有都行
+
表示允许的次数是1至正无穷次,至少有一个
?
表示允许的次数是0至1,最多有一次
{n}
表示允许的次数是n次n的数值,是自定义数值
{n,}
表示允许的次数是n次以上,包括n次,最少是n次,多个不管。也就是 n至正无穷次
{n,m}
表示允许的次数是n至m次,包括n和m
// 只能是数字字符,字符个数没有要求
var reg4 = /^\d*$/;
console.log( reg4.test('1') );
console.log( reg4.test('') );
console.log( reg4.test('123') );
console.log( reg4.test('123abc') );
console.log( reg4.test('123abc123') );
//必须是数字字符,至少出现1个数字字符
var reg5 = /^\d+$/;
console.log( reg5.test('1') );
console.log( reg5.test('') );
console.log( reg5.test('123') );
console.log( reg5.test('123abc') );
console.log( reg5.test('123abc123') );
// 必须是数字字符,最多只能有0个或者1个字符
var reg6 = /^\d?$/;
console.log( reg6.test('1') );
console.log( reg6.test('') );
console.log( reg6.test('123') );
console.log( reg6.test('123abc') );
console.log( reg6.test('123abc123') );
// 只能是3个数字字符
var reg7 = /^\d{3}$/;
console.log( reg7.test('1') );
console.log( reg7.test('') );
console.log( reg7.test('123') );
console.log( reg7.test('123abc') );
console.log( reg7.test('123abc123') );
// 必须都是数字字符,并且至少有一个数字字符
var reg8 = /^\d{1,}$/;
console.log( reg8.test('1') );
console.log( reg8.test('') );
console.log( reg8.test('123') );
console.log( reg8.test('123abc') );
console.log( reg8.test('123abc123') );
// 必须都是数字字符,1至3次
var reg9 = /^\d{1,3}$/;
console.log( reg9.test('1') );
console.log( reg9.test('') );
console.log( reg9.test('123') );
console.log( reg9.test('123abc') );
console.log( reg9.test('123abc123') );
特殊符号:
①\
可以表示正则表达式的规范或者是转义符,设定是不冲突的,符合哪个就执行哪个
②|
表示逻辑或的关系,表示两个规范,满足哪个都可以。如果要表示多种内容并且限定字符个数,公式 : (内容1|内容2|内容3…){次数限定}
③()
,将()中的内容作为一个整体来执行,确保执行正确
④[]
,在[]中设定的内容任意满足其中一个就可以
⑤-
表示在这个范围内的就可以a-d
⑥[^内容]
表示非内容,必须写在 / / 之外,/正则表达式/i ,/正则表达式/g
一般是与其他的函数配合使用,i忽略大小写,g全局匹配
逻辑或的判定
①内容的判断,正常的判断
②个数的判断,只要是包含个数就可以
内容可以是数字、字母、下划线、字符,只要是3个就行,不能少但可以多
数字或者数字字符下划线,并且个数只能是三个var reg1 = /^(\d|\w){3}$/;
也可以
var reg1 = /^\d{3}$|^\w{3}$/;
console.log( reg1.test( '123' ) );
console.log( reg1.test( 'abc' ) );
console.log( reg1.test( '1234' ) );
console.log( reg1.test( 'abcd' ) );
console.log( reg1.test( '1!1' ) );
console.log( reg1.test( 'a&b' ) );
console.log( reg1.test( 'ab' ) );
console.log( reg1.test( '12' ) );
console.log( reg1.test( '12&12' ) );
console.log( reg1.test( 'ab&ab' ) );
// 内容只能是 a b c d 4个字符,多了不可以
var reg2 = /^[abcd]$/;
console.log( reg2.test('a') );
console.log( reg2.test('b') );
console.log( reg2.test('c') );
console.log( reg2.test('d') );
console.log( reg2.test('ab') );
console.log( reg2.test('abc') );
console.log( reg2.test('abcd') );
console.log( reg2.test('bc') );
console.log( reg2.test('bcd') );
console.log( reg2.test('cd') );
//a-d之间的字符,只能是一个
var reg3 = /^[a-d]$/;
console.log( reg3.test('a') );
console.log( reg3.test('b') );
console.log( reg3.test('c') );
console.log( reg3.test('d') );
console.log( reg3.test('ab') );
console.log( reg3.test('abc') );
console.log( reg3.test('abcd') );
console.log( reg3.test('bc') );
console.log( reg3.test('bcd') );
console.log( reg3.test('cd') );
//字符范围不再 a-d 之前,并且是一个字符
var reg4 = /^[^(a-d)]$/;
console.log( reg4.test('a') );
console.log( reg4.test('b') );
console.log( reg4.test('c') );
console.log( reg4.test('d') );
console.log( reg4.test('ab') );
console.log( reg4.test('abc') );
console.log( reg4.test('abcd') );
console.log( reg4.test('bc') );
console.log( reg4.test('bcd') );
console.log( reg4.test('cd') );
console.log( reg4.test('z') );
其他配合函数
①search(),字符串查找函数。在字符串中查找是否有符合的内容,如果有返回下标,没有返回-1,返回的是第一个符合内容的索引下标
indexOf() 也是查找,也返回索引下标,但是不支持正则表达式
var str1 = 'abcdefgab';
// 默认是区分大小写的
console.log( str1.search('ab') );
console.log( str1.search('B') );
// 正则表达式不区分大小写
console.log( str1.search(/B/i) );
console.log( str1.indexOf('b') );
//indexOf() 不支持正则表达式
console.log( str1.indexOf(/B/i) );
②match(),找到符合规范的字符串并且返回内容,默认只会执行一次并且返回第一次符合规范的内容
var str2 = 'abcdefgabcdefg';
var arr1 = str2.match('ab');
// 正则表达式匹配全局
var arr2 = str2.match(/ab/g);
console.log(arr1);
console.log(arr2);
③replace(),字符串替换,默认只替换第一个符合的内容
var str3 = 'abcd啊abcd啊abcd啊abcd';
// 默认值替换第一个
str3 = str3.replace('啊' , '额');
// 正则表达式替换全局
str3 = str3.replace( /啊/g , '额');
console.log(str3);