学习笔记
Javascript
(一)正则表达式
1.作用
正则表达式主要用来验证客户端的输入数据。
2.定义
字面量写法 : var reg=/表达式/修饰符
构造函数创建方法: var reg=new RegExp(“表达式”,“修饰符”);
3.方法
(1)正则表达式的方法
①test:查看字符串是否有满足正则表达式的内容,如果有,返回true,没有就返回false。
语法:正则表达式.test(字符串)
var reg=/abc/;
var bool=reg.test("abcde");
console.log(bool);//返回true
var reg=/abcxx/;
var bool=reg.test("abcde");
console.log(bool);//返回false
②exec:查找符合正则内容 ,返回一个数组,没找到就会返回null,不能查找多个。
语法:正则表达式.exec(字符串)
var reg=/abc/;
var str="abcdeabc"
var bool=reg.exec(str);
console.log(bool);//["abc"]
var reg=/abcdeabc/;
var bool=reg.exec("abccc");
console.log(bool);//null
(2)字符串的方法
①replace:字符替换。
语法:字符串.replace(正则表达式,替换字符)
var str = "abcdabcd";
str1 = str.replace(/a/, "z");
console.log(str1);//返回zbcdabcd
str2 = str.replace(/[ac]/g, "z");
console.log(str2);//返回zbzdzbzd
//g为全局查找
str3 = str.replace(/[ac]/g, function (item, index) {
if (item === "a") return "x";
if (item === "c") return "y";
})
console.log(str3);//返回xbydxbyd
//replace后面的函数 参数有2个,第一个是查找到的元素,
//第二个是下标,这个函数中return 的结果就是这个对于的字符串要替换成什么
②match:查找返回数组。
语法:字符串.match(正则表达式)
var str = "abcdabcd";
console.log(str.match(/a/));
//返回["a", index: 0, input: "abcdabcd", groups: undefined]
//查找一个时,与test类似,可以返回一个数组,下标和查找到的内容
console.log(str.match(/a/g));
//查找多个,就会把每个查找到的内容返回出来
③search:查找元素,返回下标。
语法:字符串.search(正则表达式)
var str="abcdabcd";
console.log(str.search(/c/));
//2
//只能找到一个正在表达式的下标
④split:分隔成数组。
语法:字符串.split(正则表达式)
var str = "ab?c=3&da=4&bcd=5";
var arr = str.split(/[?&]/g);
console.log(arr);//(4) ["ab", "c=3", "da=4", "bcd=5"]
5.匹配规则
(1)元字符: /abc/
解释:abc就是元字符,要求必须包含a接下来是b,再接下来是c的字符。
var reg=/abc/;
var str="acabadc";
console.log(str.test(reg));//true
特殊含义的字符:
定义 | 解释 |
---|---|
\w | 查找单词字符。 |
\W | 查找非单词字符。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
(2)修饰符:
定义 | 解释 |
---|---|
g | 全局操作 |
i | 不区分大小写 |
m | 多行匹配 |
var str="a&tacta";
console.log(str.replace(/a/g,"z"));//返回z&tzctz
(3)通配符: .
解释:任意一个字符
var reg=/c.t/g;
console.log("cdtcat".match(reg)); //["cdt", "cat"]
var reg=/a./g
var str="ababdeaf";
str=str.replace(reg,"az");
console.log(str); //azazdeaz
(4)转义符: /
解释:\内容 相当于将内容转换为字符
正则中需要用斜杠转义的字符:^ . $ * + ? [ ] ( ) { } \ / |
(5)字符类: [ ]
解释:满足[]内任意一个字符 中括号内代表任意一个字符
关于[ ]内转义:其中. 这个通配符在[]内不需要转义,因为在中括号内.就是字符.不是通配符,除了通配符. 以外在[]内其它符号仍需要转义 [, ],这两个字符也需要转义
var str="a&tacta1tadtalt";
console.log(str.match(/a[abcdef]t/g));
//返回数组["act","adt"]
定义 | 解释 |
---|---|
[0-9] | 表示查找1到9之间的其中一个数字,与\相同 |
[a-z] | 表示查找小写a到z之间的其中一个字母 |
[A-Z] | 表示查找大写A到Z之间的其中一个字母 |
[0-9a-zA-Z] | 表示查找数字加大小写字符中的一个字符,与\w相同 |
[\u4e00-\u9fa5] | 表示查找其中一个汉字 |
(6)反义字符: [^]
解释:/[ ^ a-zA-Z]/ 除了字母以外
/[a ^ cb]/ 如果^ 不是[ ]的第一位,就代表^字符。实际这个是匹配 acb ^ 4 个字符中任意一个
(7)重复: {}
定义 | 解释 |
---|---|
{n} | 重复n次 |
{n-1,n} | 最少重复n次,最多重复n-1次,如果匹配的字符串中有最长的,则优先最长的。 |
[0] | 任何内容重复0次,就是"" |
//{n}
var str="aaacta";
console.log(/a{3}/g.test(str));//返回true
//{n-1,n}
var str="aaaaacta";
console.log(/a{3,5}/g.test(str));//返回true
//{0}
var str="aaaaacta";
console.log(str.match(/a{0}/g));
//返回(9) ["", "", "", "", "", "", "", "", ""]
//不管{0}前面是什么内容,都会根据字符串长度返回字符串的空字符
//而字符串的空字符表示在 ===> str=" ""a""a""a""a""a""c""t""a"" "
var str="aaaaacta";
console.log(str.match(/ab{0}/g));
//返回(6) ["a", "a", "a", "a", "a", "a"]
//其中{0}==="" ,而ab{0}===""a
var str="aaaaacta";
console.log(str.match(/c{0}a/g));
//返回(6) ["a", "a", "a", "a", "a", "a"]
//其中{0}==="" ,而c{0}a===a""
定义 | 等同 | 解释 | 举例 |
---|---|---|---|
* | {0,} | 有或者没有,有多少个都可以 | /ca{0,}t/ === /ca*t/ |
+ | {1,} | 有至少一个以上 | /ca{1,}t/ === /ca+t/ |
? | {0,1} | 有或者没有都行,最多1个 | /ca{0,1}t/ === /ca?t/ |
重点: 贪婪和非贪婪匹配
①贪婪匹配:最大优先匹配
console.log("caataaaataaaaat".match(/c.*t/));
//返回数组["caataaaataaaaat"]
console.log("caataaaataaaaat".match(/c.+t/));
//返回数组["caataaaataaaaat"]
②非贪婪匹配:
console.log("caataaaataaaaat".match(/.?t/));
//返回["at","at"]
console.log("caataaaataaaaat".match(/c.*?t/));
//返回数组["caat"]
console.log("caataaaataaaaat".match(/c.+?t/));
//返回数组["caat"]
(8)起始符: ^
解释:写在[]内叫反义,写在中括号外最前叫做起始
var str="aaacta";
console.log(/^a/g.test(str));//返回true
console.log(/^c/g.test(str));//返回false
(9)结束符: $
解释:写在正则最后叫做结束
var str="aaactae";
console.log(/e$/g.test(str));//返回true
console.log(/c$/g.test(str));//返回false
(10)或者: |
解释:写在正则最后叫做结束
处理顺序:前面先匹配然后再向后匹配
定义 | 解释 |
---|---|
a|b | 表示查找 a 或者 b |
a||b | 表示查找 a 或者 “” 或者b,根据处理顺序,一般遇到""时便处理到字符串结尾 |
|a | 表示查找 “” 或者 a,根据处理顺序,一般遇到""时便处理到字符串结尾 |
a| | 表示查找 a 或者 “” |
// a|b 示例
console.log("abcd".match(/ab|cd|/g));
//返回(3) ["ab", "cd", ""]
// a||b 示例
console.log("abcd".match(/ab||cd/g));
//返回(4) ["ab", "", "", ""]
// |a 示例
console.log("abcd".match(/|ab/g));
//返回(5) ["", "", "", "", ""]
// a| 示例
console.log("abcd".match(/ab|/g));
//返回(4) ["ab", "", "", ""]
(11)分组: ()
解释:()是可以将一些内容进行分组。
顺序:分组的顺序是从外向内,从前向后
注意:当使用分组时,不要使用g全局匹配
console.log(/a(bc){2}d/.test("abcbcd"));//true
var str="18675467689";
str=str.replace(/^(\d{3})(\d{4})(\d{4})$/,"$1****$3");
//定义 $1是群组1 $3是群组3
console.log(str);//186****7689
(12)前后置条件:
定义 | 通过示例解释 |
---|---|
(?=) | var str=“abad”.replace(/a(?=d)/g,“z”); //返回abzd 判断这个a紧跟其后的是不是d,如果是,就改变这个a为z |
(?!) | var str=“abadac”.replace(/a(?!d)/g,“z”); //返回zbadzc 判断这个a紧跟其后的是否不是d,如果不是,就改变这个a为z |
(?<=) | var bstr=“abcbdb”.replacce(/(?<=c)b/g,“z”); //返回abczdb 判断这个b前面的是不是c,如果是,b就改变这个b |
(?<!) | var str=“abcbdb”.replace(/(?<!c)b/g,“z”); //返回azcbdz 判断这个b前面的是否不是c,如果不是,就改变这个a为z |
6.一般验证规则
(1)密码规则: /^(?=\D+\d)(?=.[a-z])(?=.[A-Z])[a-zA-Z0-9]{8,16}$/
解释:
(?=\D+\d) 条件是首字母不能是数字,但是整个字符串中必须含有1个数字
(?=.[a-z]) 必须包含一个小写字母,字母可以在任意位置
(?=.[A-Z]) 必须包含一个大写字母,字母可以在任意位置
[a-zA-Z0-9]{8,16} 大小写字母和数字字符最少8个,最多个16
(2)用户名 /^\w{8,16}$/
(3)邮箱验证 /^\w{5,}@[a-zA-Z0-9]{2,}.(com|net|org)(.cn)?$/
(4)电话号码 /^1\d{10}$/
(5)网址验证 /^https?:\ / \ /www.\w+.\w+$/
7.简化练习
z.......z //简化:/z\.{7}z/
\d\d\d\d-\d\d-\d\d // 简化: /(\d){4}(-\d{2}{2})/
[aeiou][aeiou][aeiou][aeiou][aeiou][aeiou] //简化:/[aeiou]{6}/
[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz] //简化:/[bcdfghjklmnpqrstvwxyz]{2}/
".{0,}" and "[^"]{0,} //简化:/".*?"/
x?x?x? //简化: /x{,3}/
y*y* //简化: /y*/
z+z+z+z+ //简化:/z{4,}/
s|t|u|v|w //简化:/[s-w]/
aa|ab|ba|bb //简化:/[ab]{2}/
[abc]|[^abc] //简化:/./
[^ab]|[^bc] //简化:/[^b]/
[ab][ab][ab]?[ab]? // 简化:[ab]{2,4}