XM的小窝


 

正则表达式

正则表达式

正则表达式也是对象

当前阶段我们使用正则表达式主要是用来做表单验证

利用RegEXP创建正则表达式

var reg = new RegExp(/123/);
console.log(reg);

利用字面量创建正则表达式

var rg = /123/;

测试正则表达式

console.log(/123/.test('123')); //true
console.log(/123/.test('12d3')); //false
console.log(/123/.test('ddd123ddd')); //true
console.log('----------------------------');

边界符号 ^ $

^ 是开头
$ 是结尾

var r = /^abc/; //必须以abc开头
console.log(r.test('aabc')); //false
console.log(r.test('abcd')); //true
console.log('----------------------------');

P.S: 正则表达式不需要加引号

利用边界符号进行精确匹配

var r = /^abc$/; //必须是abc
console.log(r.test('aabc')); //false
console.log(r.test('abcd')); //false
console.log(r.test('abc')); //true
console.log('----------------------------');

字符类 []

字符类 [] 表示有一系列字符可供选择,只要匹配其中一个就可以,匹配方括号中的任意字符

var rr = /[abc]/;
console.log(rr.test('abc')); //true
console.log(rr.test('aabbcc')); //true
console.log(rr.test('a12')); //true
console.log(rr.test('123')); //false
console.log('----------------------------');
//三选一 只能包含这三个字母中的其中一个
var rr1 = /^[abc]$/ //true
console.log(rr1.test("abc")); //false
console.log(rr1.test("a")); //true
console.log(rr1.test("b")); //true
console.log(rr1.test("c")); //true
console.log(rr1.test("a111")); //false
console.log('----------------------------');

方括号内的范围符 [-]

var rr2 = /^[a-z]$/ //26个英文字母中的任意一个
console.log(rr2.test("a")); //true
console.log(rr2.test("a")); //true
console.log(rr2.test("f")); //true
console.log(rr2.test("A")); //false
console.log(rr2.test("Aaads")); //false
console.log('----------------------------');

字符组合

var reg1 = /^[a-zA-Z0-9_-]$/; //26个大小写英文字母和数字,下划线,短横中任何一个
//zA之间有没有空格无所谓
console.log(reg1.test("A")); //true
console.log(reg1.test("_")); //true
console.log(reg1.test("2")); //true
console.log(reg1.test("-")); //true
console.log(reg1.test("f")); //true
console.log(reg1.test("Aa")); //false
console.log('----------------------------');

如果中括号里面有^ 表示取反的意思 不要和边界符弄混了

var reg1 = /^[^a-zA-Z0-9_-]$/; //不能包含26个大小写英文字母和数字,下划线,短横中任何一个
console.log(reg1.test("A")); //false
console.log(reg1.test("_")); //false
console.log(reg1.test("2")); //false
console.log(reg1.test("-")); //false
console.log(reg1.test("f")); //false
console.log(reg1.test("@a")); //false
console.log(reg1.test("@")); //true
console.log('----------------------------');

量词符

量词符用来设定某个模式出现的次数

量词符*

相当于 >=0 可以出现0次或者很多次,匹配前一个表达式 0 次或多次

var reg111 = /^a*$/; //必须都要是以a开头,a结尾,0个或者任意多个a 的字符串
console.log(reg111.test('')); //true
console.log(reg111.test('a')); //true
console.log(reg111.test('aaaaaa')); //true
console.log(reg111.test('aaaaada')); //false
console.log('----------------------------');

量词符+

  • 相当于 >=1 可以出现1次或者很多次,匹配前一个表达式 1 次或多次
var reg111 = /^a+$/; //必须都要是以a开头,a结尾,1个或者任意多个a 的字符串
console.log(reg111.test('')); //false
console.log(reg111.test('a')); //true
console.log(reg111.test('aaaaaa')); //true
console.log(reg111.test('aaaaada')); //false
console.log('----------------------------');

量词符\?

? 相当于 0<=x<=1 可以出现0次或者1次,匹配前一个表达式 0 次或 1 次

var reg111 = /^a?$/; //必须都要是以a开头,a结尾,a出现0次或者一次
console.log(reg111.test('')); //true
console.log(reg111.test('a')); //true
console.log(reg111.test('aa')); //false
console.log(reg111.test('ad')); //false
console.log('----------------------------');

量词符{n}

{n} 匹配了前面一个字符刚好出现了 n 次情况。

var reg111 = /^a{3}$/; //必须都要是以a开头,a结尾,a出现刚好3次
console.log(reg111.test('')); //false
console.log(reg111.test('a')); //false
console.log(reg111.test('aa')); //false
console.log(reg111.test('aaa')); //true
console.log(reg111.test('aaaaaaa')); //false
console.log('----------------------------');

量词符{n,}

{n,} 相当于>=n 匹配了前面一个字符三次或三次以上的情况

var reg111 = /^a{3,}$/; //必须都要是以a开头,a结尾,a出现3次或以上
console.log(reg111.test('')); //false
console.log(reg111.test('a')); //false
console.log(reg111.test('aa')); //false
console.log(reg111.test('aaa')); //true
console.log(reg111.test('aaaaaaa')); //true
console.log('----------------------------');

量词符{n,m}

{n,m} 相当于 n<=x<=m 匹配了前面一个字符个数在n和m之间的情况,如果 n 或者 m 的值是0, 这个值被忽略。

var reg111 = /^a{3,6}$/; //必须都要是以a开头,a结尾,a出现3-6次
console.log(reg111.test('')); //false
console.log(reg111.test('a')); //false
console.log(reg111.test('aa')); //false
console.log(reg111.test('aaa')); //true
console.log(reg111.test('aaaaaa')); //true
console.log(reg111.test('aaaaaaaa')); //false
console.log('----------------------------');

综合练习

写一个匹配英文数字字符的正则表达式:

var reg = /^[a-zA-z0-9]$/; // 这个模式用户只能数组英文的数字,但是有边界符 和 [] 这就限定了只能多选1

但有些时候我们并不想只匹配一个字符,这时候就需要设置量词了

var reg = /^[a-zA-z0-9]{8,16}$/; //这样就限定为8-16位英文和数字
//表达式中间不要出现空格
console.log(reg.test('a')); //false
console.log(reg.test('asdfg3')); //false
console.log(reg.test('asdfgasd312')); //true
console.log(reg.test('asdfgasd31!')); //false
console.log(reg.test('asdfhjjklasd4h4k51')); //false

括号符

其实就是 () 单纯的括号罢了,用于提升表达式部分的优先级
例如:var reg = /^(abc){3}$/ 表示abc出现3次 即 abcabcabc

正则表达式追加匹配模式

g 表示全局匹配
i 表示忽略大小写
gi 表示以上两者结合
| 表示或者

作用:replace方法使用普通的正则表达式只能替换掉第一次匹配到的字符串,而且会区分大小写,只有加了匹配模式才可以一次性替换掉所有符合的字符
用法:

console.log(str.replace(/kano/gi, "kano yyds !"));

/后面的gi就是匹配模式

正则表达式和 replace() 方法配合使用

warning:(以下例子可能有些暴力)

var str = '我今天是作为一个长者,我见得太多啦,可以告诉你们一点人生经历,中国人有一句说话叫「闷声发大财」,你们啊,sometimes naive,懂得没有?';
console.log(str.replace(/长者|闷声发大财|naive/gi, "***"));

正则表达式的预定义类

\d 表示匹配任意一个数字 相当于[0-9]
\D 匹配数字以外的一个字符 [^0-9]
\w 匹配数字,字母,下划线 [A-Za-z0-9_]
\W 上面的取反
\s 匹配空格,包括制表符tab和换行符等,相当于 [\t\r\n\v\f]
\S 上面的取反

其他见:MDN:正则表达式

(一定不是因为我懒得写了) :鹿乃_哼歌:

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注