正则表达式

282 阅读2分钟

正则表达式定义的两种方法:

   var reg1=/abc/;
   var reg2 =new RegExp("abc");

正则表达式有两个方法,exec和test

reg.exec(str)如果能匹配到返回的是数组,第0项返回的是匹配的内容,index表示对应的数组下标,如果没有匹配成功,返回null。

reg.test(str)如果能匹配到返回的是true,匹配失败返回的是false.

一、c{1},c{2},c{3}...c{n} n个连续的c

   var reg1=/c{1}/;
   var str1="abcujukiki";
   console.log(reg1.exec(str1))
   结果为"c"
   var reg1=/c{2}/;
   var str1="abcujukiki";
   console.log(reg1.exec(str1))
   结果为null

如果把str1改成abcujukikic,结果也为null,因为虽然字符串里有两个c,但是这两个c不是连续的,所以匹配不成功。

二、c{n,m}表示n个或m个。大于等于n,小于等于m,而且会在这个范围里尽可能多的匹配连续的c。

   var reg1=/c{2,4}/;
   var str1="abcccccujukciki";
   console.log(reg1.exec(str1))

例子中应该匹配大于等于2个,小于等于4个c,字符串里有5个c,尽可能多的去匹配,所以会匹配到4个连续的C。

三、c{n,} 表示匹配大于等于n个连续的c

   var reg1=/c{2,}/;
   var str1="abcccccujukciki";
   console.log(reg1.exec(str1));

字符串中有5个连续的c,要求匹配的个数是大于等于2,并且尽可能多的去匹配,所以会匹配5个连续的c。

c* 大于等于0个连续的c.

c+ 大于等于1个连续的C。

c?等同于{0,1}满足0个就算成功。

在{}后加一个?表示非贪婪,尽可能少的去匹配。

c??第一个?表示数量{0,1} 第二个?表示非贪婪

^c表示以c为开头的

    var reg =/^c/
    var string1="momoc"
    console.log(reg.exec(string1))

结果为null,因为字符串里虽然有c,但是不是在开头,所以匹配不成功。

c$表示以c为结尾的。

    var reg =/^c/
    var string1="momoc"
    console.log(reg.exec(string1))

结果为c,且索引下标为4,因为虽然字符串里有几个c,但是要匹配的是以c结尾的。

.表示触\n之外的所有字符,且正则表达式要求第一个字符不是\n.

[abc]匹配[]中的其中一个就算匹配成功。

    var reg =/[abc]/
    var string1="amomoc"
    console.log(reg.exec(string1))

结果为a,索引值为0,因为匹配abc中任意一个就算匹配成功,所以先匹配到a,就结束了。

小写字母[a-z] 大写字母[A-Z] 数字[0-9] 可以写在一起,中间不用任何符号分割[a-zA-Z0-9]

^ [a-z]以小写字母开头

 var reg =/^[a-z]/
 var string1="amomoc"
 console.log(reg.exec(string1))

结果为a

[^a-z]反小写字母

    var reg =/[^a-z]/
    var string1="amomoc"
    console.log(reg.exec(string1))
    

结果为null,因为要匹配的是非小写字母,而字符串里都是小写字母,所以匹配不到。

边界\b , 非\B \d数字,\D非数字 \s空格(单个)\S非空格 \n换行 \w表示大小写字母、数字[A-Za-z0-9] 不区分大小写/i /m修改^和$ ,/g第一次从头开始找,下一次以下一个匹配。

\1表示等同于第一个括号内匹配的内容(字符表达式)

    var reg =/(mo)\1/
    var string1="amomoc"
    console.log(reg.exec(string1)

结果为“momo”,"mo" 还会再把(mo)匹配到的内容再重复一遍。

(?=)紧跟着限定,不参与匹配,只是检查是否符合条件

匹配电话号码:

  var reg1= /^1[34578]\d{9}$/
    var str1="1810368467699"
    console.log(reg1.exec(str1))

匹配用户名:

   var reg2 =/^[a-zA-Z0-9_-]{4,16}$/
    var str2="-gkhnnkbmgk";
    console.log(reg2.exec(str2))

匹配身份证:

    var reg3=/^\d{15}$|^[0-9]{17}[X\d]$/
    var str3="46902110622242X";
    console.log(reg3.exec(str3))

匹配邮箱:

var reg4=/^[\w-_.]+\@[\w-_.]+\.[a-zA-Z]{2,4}$/
var str4="mozhiyun@qq.com";
console.log(reg4.exec(str4))