学习笔记(一)Javascript 正则表达式

学习笔记

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值