正则表达式:语法
字面量定义
var reg1=/a/g /正则表达式内容/修饰符
构造函数定义
var reg2=new RegExp("a","g")
/正则表达式内容/修饰符
正则表达式内容,用于匹配字符串对应的内容
var str=“abcdef” /cde/ 匹配字符cde
修饰符 针对匹配做一系列的扩展
1.全局g
2.大小写不区分 i
3.多行m修饰符可以使用多个,修饰符可以使用多个地方,而且不需要区分顺序。
正则表达式作用:
1.将所有的字符串,中的内容的字符完成替换,查找,拆分,排序,统计,验证格式。
(正则表达式初级的简单测试,一个简单的密码验证)
正则的方法
test();匹配正则表达式,和正则表达式的需求相同,也就是说,/ab/.test(“字符串”),那我test(“字符串”),中就比喻要有ab,才会返回true
exec();/ab/.exec(“字符串”),找到匹配的元素从什么位置形成的数组,以及匹配内容,不能使用全局匹配。
正则表达式的属性:
reg.soursce,正则表达式内容(只读,不能修改)
reg.flage:修饰符(只读,不能修改)
正则表达式:方法
可以应用于字符串方法:
str.replace();替换
str.match();查找,匹配正则表达式的所有满足项,如果不使用g(全局匹配),
那么和正则exec相同,如果使用g,那么会将所有匹配的字符放在一个数组中。返回这个数组
str.search();查找索引,类似于indexof,不过这个是针对正则匹配的,
全局匹配无效(只能查找一个),但是可以不区分大小写查找,
str.split();切割,切割为数组,这个可以按照不同的需求切割
replace的用法太多了,做个小练习吧
var str="Abacaddab";
str=str.replace(/ab/,"00");
console.log(str);
str=str.replace(/ab/g,"00");
console.log(str);
str=str.replace(/a./g,"00");
console.log(str);
str=str.replace(/a./g,function(item,index){
if(item==="ab") return "00";
if(item==="ac") return "11";
if(item==="ad") return "22";
})
console.log(str);
str="18617654536".replace(/^(\d{3})(\d{4})(\d{4})$/,"$1****$3");
console.log(str);
元字符
在正则表达式中所有乱七八糟的符号,就是元字符
/ab/ 斜杠中就是正则的内容,正则匹配时,严格按照正则内容的先后顺序匹配
/a./ 点儿就是元字符中的通配符,代表任意!一个字符!/a../这样就是获取两个字符
\ 转义符 \.,反斜杠点儿,转义为字符点儿,而不是让它成为通配符,
同理反斜杠可以转义任何符号,
但是转义只能是一个反斜杠,
也就是说正则表达式中遇到的第一个反斜杠就是转义
[] 中括号,里面的内容代表能匹配的唯一一个元素,中括号就是代表一个替代字符的范围,
中括号内重复无效,所有在中括号里面的东西都会被默认为字符,
除了^写在第一位的上箭头,和任意位置的反斜杠\以外
[a-z] 代表所有的英文字母小写,(同理大写和0-9的数字);
排到第一位的上箭头^作用是反义,就是不要箭头后面的内容
转义字符:
\w 指的是[a-zA-Z0-9]代表一个字符,就是字符数字,下划线中的任意一个字符。
\W: [a-zA-Z0-9]除了字符数字下划线以外的任意一个字符串
\d: [0-9]任意一个数字
\D: [0-9]任意一个非数字
\s: 空白字符
\S: 非空白字符
正则重复符{}:
/a{}/ 类型或者字符重复
重复范围{最少重复量,最多重复量},这是一个范围,如果有满足最大的,
按最大取值,这种叫贪婪匹配
* 相当于{0,}可能有能没有
+ 相当于{1,}至少有一次
?相当于{0,1}有或没有
.*?
.+?
非贪婪匹配,非贪婪匹配的两端必然有其它字符作为前后控制,
中间内容通常使用范围重复次数
在重复内容的后面加?就是取最少,就是非贪婪匹配
或者和首尾
| :单竖就是或者,如果在使用或者时就一个字符,使用[]替代就得了,没必要用|
或者符用的是从左到右的优先匹配
^ :上箭头,在正则表达式起始位置的,叫做起始符
$ :正则表达式的结尾位置,叫做结束符
群组和断言:
群组就是括号():里面有很多题,见老师代码
断言:这里的表达式只作为条件来判断,不作为符号触发
(?=n) 前瞻断言
(?!n)前瞻否定断言
(?<=n)后瞻断言
(?<!n) 后瞻否定断言
做几个小练习吧
console.log("abdacb".match(/a./g))// . 元字符 代表任意1个字符
console.log("abdacb".match(/a../g))// . 元字符 代表任意1个字符
console.log("abda6b".match(/a../g))// . 元字符 代表任意1个字符
console.log("a_da*b".match(/a../g))// . 元字符 代表任意1个字符
console.log("acbadb".match(/a.b/g))// . 元字符 代表任意1个字符
console.log("acba.b".match(/a\.b/g))// \. 转义为字符.
console.log("acba.b".match(/a\\b/g))// 在正则表达式中遇到的第一个\就是转义的含义
console.log("abaca6a7".match(/a./g));
console.log("abaca6a7".match(/a[bcd]/g));//中括号里面的内容代表能匹配的唯一一个元素,[]就是代表一个替代字符的范围
console.log("abdaca6a7".match(/a[bcd]/g));
console.log("abbca6a7".match(/[ab][bc]/g));
console.log("abbca6a7".match(/a[A-Za-z]/g));
console.log("abbca6a7".match(/a[A-z]/g));//错误的
console.log("abbca6a7".match(/a[a-Z]/g));//错误
console.log("abbca6a7".match(/a[0-9]/g));
console.log("abbca6a7".match(/a[a-zA-Z0-9_]/g));
console.log("abbca6a7".match(/a[1-7]/g));
console.log("abbca6a7".match(/a[c-f]/g));
console.log("abbca6a7".match(/a[1-31]/g));//1-3
console.log("abbca6a7".match(/a[234235236]/g));//[]内重复无效
console.log("abbca6a7".match(/a[.^$]/g)); //除了写在第一位^和任意位置\ 以外都会被默认为字符而不是各种其他变化
console.log("abbca6a7a.".match(/a[0-9.]/g));
console.log("abbca6a7a.".match(/a[0-9\.]/g));
console.log("abbca6a7a.".match(/a[0-9^.]/g));
console.log("abbca6a7a.".match(/a[0-9\\]/g));
反义
console.log("abbca6a7a.".match(/a[^a-z]/g));// ^写在[]的第一位,表示反义,不要^后面的内容
console.log("abbca6a7a.".match(/a[^A-Z]/g));// ^写在[]的第一位,表示反义,不要^后面的内容
console.log("abbca6a7a.".match(/a[^^]/g));//
console.log("abbca6a7a.".match(/a[^\^]/g));//除了^的其他字符
console.log("abbca6a7a.".match(/a[a-z^0-9]/g));//a-z或者^或者0-9中的任意一个
重复 类型或者字符
console.log("abbbbbbbacccccasdsdwqadddd".match(/a.{5}/g));
console.log("abbbbbbbacccccadddd".match(/ab{5}/g));
console.log("abbbbbbbacccccadddd".match(/a[bd]{4}/g));
console.log("abbbbbbbacccccadddda12345".match(/a\d{4}/g));
console.log("abbbbbbbacccccadddda12345".match(/a[0-9]{4}/g));
console.log("abbbbbbbacccccadddda12345".match(/a\w{4}/g));
console.log("abbbbbbbacccccadddda12345".match(/a\D{4}/g));
console.log("abbbacccadddda1234".match(/a.{1}/g)); /a./g
console.log("abbbacccadddda1234".match(/a.{0}/g));
console.log("abbbacccadddda1234".match(/b{0}/g));
重复范围 如果有满足最大的,按最大数量获取 贪婪匹配
console.log("abbbacccadddda1234".match(/a.{3,5}/g));
console.log("abbaacadaa".match(/a.{0,3}/g));
console.log("abbaacadaa".match(/.{0,3}/g));
console.log("colour".match(/colou{0,1}r/g));
console.log("color".match(/colou{0,1}r/g));
console.log("《西游记》《三国演义》《钢铁是怎么炼成的》")
变成:西游记,三国演义,钢铁是怎样炼成的
//console.log("《西游记》《三国演义》《钢铁是怎么炼成的》".match(/[^《》]{1,}/g))
console.log('"你好","欢迎来学习"');
变成:你好,欢迎来到千锋学习
//console.log('"你好","欢迎来学习"'.match(/[^"]{1,}/g).join(""))
console.log("<div></div><p></p><a><div></div></a>")
变成:<span></span><span></span><span><span></span></span>
//console.log("<div></div><p></p><a><div></div></a>".replace(/[^<\/>]+/g,"span"));
console.log("abac".match(/a(?=c)/g))
console.log("abac".replace(/a(?=c)/,"0"));//写了一个条件a后面必须是c,找到a
console.log("abac".replace(/a(?!c)/,"0"));//写了一个条件a后面必须不是c,找到a
console.log("abdb".match(/(?<=a)b/g))
console.log("abdb".replace(/(?<=a)b/g,"0"));//判断前面是a,找到后面是b的字符
console.log("abdb".replace(/(?<!a)b/g,"0"));//判断前面不是a,找到后面是b的字符
// /^(?=\D+\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,16}$/ 高级密码验证
879

被折叠的 条评论
为什么被折叠?



