前端入门之旅——正则表达式

319 阅读2分钟

注:正则表达式需要严格区分大小写

1.定义

  * var reg=/abc/;
  * var reg=new RegExp('abc');   

2.正则表达式的用途和方法

正则表达式是构成搜索模式(search pattern)的字符序列。

例:  
  * var reg=/abc/;  
  
  * var str = 'abcdefg';  
     
  * reg.exec(str) 如果能匹配到的话返回一个array ;   
     第0项返回的是匹配的内容 index 表示的是索引
     如果没有匹配成功返回 null;  
     
  * reg.test(str) 匹配字符串 如果匹配成功返回true 匹配失败返回false;    
  

3.正则表达式模式

  • {}限定正则表达式返回值个数
     c{n} 表示n个连续的C  
     c{m,n} 大于等于m小于等于n,连续的c  
     c{n,} 大于等于n个连续的C

  • 特殊字符限制正则表达式的所匹配的字符 *注:如在正则表达式中需要使用以下字符作为正常字符,需要先进行转义*
1.c* 大于等于0个连续的c 等价于c{0,}    
2.c+ 大于等于1个连续的c 等价于c{1,}  
3.c?大于等于0个小于等于1个 满足0个就算成功,返回一个空字符串 等价于c{0,1}  
4.c^ 匹配以c开头的字符串,匹配成功返回该字符
5.c$匹配以c结尾的字符串,匹配成功返回该字符  
6. .匹配所有除了/n以外的所有字符  
7.[abc] 匹配[]内的任意一个字符,匹配成功返回该字符
 [a-z]小写字母
 [A-Z]大写字母
 [0-9]数字
 [a-zA-Z0-9]表示字母和数字
8.a|b匹配字符ab,匹配成功返回a,b中的一个字符  
9.()先计算括号里的表达式  
10(^abc)表示反字符集合,匹配是除了a,b,c,以外的字符
  • 字母构成的字符
1.\b
    c\b匹配以c为左边界的字符  
    例:reg = /c\b/;
        str='cmd';
        reg.exec(str)匹配成功返回字符串c
    \bc匹配以c为右边界的字符    
    例:reg = /\bc/;
        str='维生素c';
        console.log(reg.exec(str))  
    匹配字符的边界,也就是它匹配的是一个位置,而不是一个真正的字符,此位置一侧是字符,另一侧是非字符或者字符串边界(开始或者结束位置)
    所以reg = /c\b/;
        str='维生素c';
        console.log(reg.exec(str))也能够匹配成功    
 \B非边界 c\B匹配的是不是边界的字符c;   
2.\d  等价于[0-9]
   c\d匹配的是数字0-9;
   \D匹配的是非数字
3.\n换行 与.意义刚好相反  
4.\s匹配单个空格;
  \S匹配非空格;  
5.\w 匹配字符=>[a-zA-Z0-9]
  \W匹配非字符
6.(\w)(\w)
   返回第一个\w匹配的字符和除去第一个匹配的字符后\w所匹配的字符的集合,第一个字符,第二个匹配的字符,长度为三的数组;  
   例: reg = /(\w)(\w)/;
        str='blueidea';
        console.log(reg.exec(str))
    打印结果:Array(3)0: "bl"
                      1: "b"
                      2: "l"
                      groups: undefined
                      index:  0 input: "blue idea"length:3_
                      _proto__  
7.(\w)(\w)\2\1 
  \2指的是第二个括号内匹配的内容;
  \1指的是第一个括号内匹配的内容;
  例:reg = /(\w)(\w)\2\1/;
      str='woow';
      console.log(reg.exec(str))
   打印内容:Array(3)
            0: "woow"
            1: "w"
            2: "o"
            groups: undefined
            index: 0
            input: "woow"
            length: 3__proto__: Array(0)  
  • 贪婪和非贪婪
    默认正则表达式是贪婪的,只要在合法的情况下,它们会尽量多去匹配字符
    当在表达式后加?则代表非贪婪,若匹配成功,则尽可能少的返回匹配的值;
    例:reg = /c{1,}?/; str='ccccc'; execReg(reg,str);
    打印结果只会返回一个c;

  • (?=pattern)正向预查
    要匹配的字符串,后面必须紧跟着pattern
    例:reg = /cainiao(?=8)/; str='cainiao9'; execReg(reg,str);
    返回null;只有str='cainiao8';返回cainiao,但不返回pattern;

  • ?!pattern
    要匹配的字符串,后面必须不能紧跟着pattern
    例:reg = /blue(?!idea)/; str='bluetooth'; execReg(reg,str);
    返回bule,不返回pattern;
    4.使用字符串的方法执行正则表达式
    ** 注-g表示的是所有文件中 **
    1.match
    str.match()返回到匹配的值;
    例:

var str = 'hello world';
console.log(str.match(/world/))//world
console.log(str.match(/World/))//null
console.log(str.match('e'))//e

2.search()
str.search()匹配某个字符,并返回该字符索引;
例:

var reg = /idea/;
var str = 'blueidea';
var pos = str.search(reg);
document.write(pos);  
返回值为四;

3.split()
str.split(),返回分割后的数组;
例:var str = 'hello world'; console.log(str.split(/\s+/))// ["hello", "world"] ;

4.replace() str.replace() 返回修改后的字符串 replcae传参分以下几种情况:

一,两个参数是字符串
str.replace(subStr,s);
返回一个新的字符串
二,第一个参数是正则,第二个参数是字符串
将正则匹配到的值用字符串去代替
三,第一个参数是正则,第二个参数是$1,2...99
$1...$99分别表示正则表达式的第1...99中的子表达式匹配到的值
例如:
var str3 = '这是一段原始文本,"34c这要替换4d"!';
var newStr = str3.replace( /([0-9])([a-z])/g,"$1" );
console.log( newStr ); // 这是一段原始文本,"34这要替换4"!
四,第一个参数是正则,第二个参数是函数
正则表达式有子表达式情况下,函数的第一个参数是第一个匹配到的字符串,接下来分别是各个子表达式匹配的值,然后是索引,最后一个参数是字符串本身。

5.修饰符

i    ignore - 不区分大小写    将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
g    global - 全局匹配    查找所有的匹配项。
m    multi line - 多行匹配    使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s    特殊字符圆点 . 中包含换行符 \n    默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

6,事例练习

    1.匹配收手机号 13xx 14xx 15xx 17xx 18xx  11var reg1 = /^1[34578]\d{9}$/
        var reg1 = /^1[34578][0-9]{9}$/
        var reg1 = /^(13|14|15|17|18|19)[0-9]{9}$/
    2.匹配邮箱 xx@xx.nnn xx可以是字母数字_ . -  nnn 字母
        reg2 = /^[\w._-]+\@[a-zA-Z0-9._-]+\.[A-z]{2,4}$
    3.匹配身份证号 15位全数字 或 18位最后一位可以是X
        reg3 = /^\d{15}$|^\d{17}[X0-9]$/
        reg3 = /^(\d{14}|\d{17})[X\d]$/
    4.匹配用户名正则,416位(字母,数字,下划线,减号)
        var reg4=/^[\w_-]{4,16}$/;
    注:要以$符号结尾