JavaScript 正则表达式

    

1.JavaScript 正则

  1)JavaScript RegExp对象,是对字符串进行模式匹配的强大工具。

  2)运用:在输入处验证输入的字符串是否合法,指定用户输入字符串的格式。

2.定义方法

  1)字面量语法: var reg = / pattern / attributes  (一般推荐这种写法)

  2)创建RegExp对象法: var reg = new RegExp( "pattern" , "attributes" )

  3)pattern:可以是字符串,也可以是正则表达式对象,使用创建对象法,pattern是正则表达式对象,可以不写第二个参数

  4)attributes:匹配方式。它只有三个参数:i,g,m

      g:查找所有匹配,而非查找到第一个就停止

      i:表示不区分大小写  

        //表示匹配所有的a和A

         写法1: var  reg = /a/ig     

         写法2: var reg = new RegExp("a","ig")  

      m:多行匹配       

        var str = "first second\nthird fourth\nfifth sixth";
        
        var patt1 = /(\w+)$/g
        console.log(str.match(patt));       //结果:[ "sixth"]
 
        var patt2 = /(\w+)$/gm
        console.log(str.match(patt));       //结果:["second", "fourth", "sixth"]
        
        var patt1 = /^(\w+)/g
        console.log(str.match(patt));       //结果:[ "first"]
 
        var patt2 = /^(\w+)/gm
        console.log(str.match(patt));       //结果:["first", "third", "fifth"]
        理解:加了m后实际上正则表达式是把\n、\r这些换行和回车也当成边界了

 

3.定义规则

  1)方括号[ ]:表示匹配括号中的所有字符,单个字符匹配 

      var reg = /[a-z]/     //表示满足小写a-z的字符

      var reg = /[a-z][A-Z]/     //表示满足条件并且要相邻的字符串

  2)花括号{ }:表示匹配多少个字符,通常与方括号[ ]一起使用

      var reg = /[a-z]{3}/    //表示连续的三个小写字符的字符串

      var reg = /[a-z]{1,3}/    //{1,3}表示区间,表示大于等于1,小于等于3

   3)小括号( ):表示提取字符串,匹配到的字符串可以通过$0-9可获取匹配的字符串

   4)^符号:

       ①表示匹配一个字符串的开头

        var reg = /^[a-z]/    //表示以小写字母开头的字符串

       ②如果^符号出现在[]中的第一个字符位置,表示不包含此字符串

        var reg = /[^a]/    //表示字符串中不能有a

   5)$符号:表示匹配一个字符串的结尾

      var reg = /d$/    //表示以d结尾的字符串

   6)转义字符\

   .:查找单个字符,除了换行和行结束符

   \w:查找单词字符  ===  [a-zA-Z0-9]

   \W:查找非单词字符 === [^a-zA-Z0-9]

   \d:查找数字 === [0-9]

   \D:查找非数字 ===  [^0-9]

   \s:查找空白字符 === 空格、TAB、换页符

   \S:查找非空白字符 

   \b:匹配单词边界

   \B:匹配非单词边界

   \0:查找NUL字符

   \f:查找换页符

   \n:查找换行符

   \r:查找回车符

   \t:查找制表符

   \v:查找垂直制表符

   \xxx:查找以八进制数xxx规定的字符

   \xdd:查找以十六进制数dd规定的字符

   \uxxxx:查找以十六进制数xxxx规定的Unicode字符

  7)量词

   n+:+号表示匹配任何包含至少一个n的字符串

   n*:匹配任何包含零个或多个n的字符串

   n?:匹配任何包含零个或一个n的字符串

   n{X}:匹配包含X个n的序列的字符串

   n{X,Y}:匹配包含X或Y个n的序列的字符串

   n{X,}:匹配包含至少X个n的序列的字符串

   ?=n:匹配任何其后紧接指定字符串n的字符串

   ?!n:匹配任何其后没有紧接指定字符串n的字符串

 4.正则表达式的方法

  1)test():在字符串中查找符合正则(reg)的内容,若查找得到返回true,否则false

    格式:reg.test(字符串)

    let emailPattern=/^([a-zA-Z0-9_\-\.])+\@([a-zA-Z0-9_\-\.])+\.([a-zA-Z]{2-4})$/

    emailPattern.test("simon@126.com")      //返回true

  2)search():在字符串中查找符合正则(reg)的第一次出现的位置,若查找到返回第一次出现的位置,否则返回-1

    格式:字符串.search(reg)

    let str = "simon@126.com"

    str.search(/@/)      //返回 5

  3)match():获取正则(reg)匹配的结果,以数组的形式返回

    格式:字符串.match(reg)

          

          

    注意:不是全局匹配则只返回第一个,没有匹配到则返回null

  4)exec():捕获符合正则(reg)的字符串,若捕获到符合正则的字符串则返回一个Array实例

    格式:reg.exec(字符串)

          

  5)replace():用于在字符串中用一些字符替换另一些字符,或替换一个与正则(reg)匹配的子串

    格式:字符串.replace( reg | 字符串,字符串 | 回调函数 )

    (1)字符串.replace(字符串,字符串 | 回调函数)   //回调函数必须返回的式一个字符串

       "abcde12345abc".replace("abc","mmm");    //  return:mmmde12345abc

    (2)字符串.replace(reg,字符串)

      "abcde12345abc".replace(/abc/g,"mmm")                //  return:mmmde12345mmm

    (3)字符串.replace(reg,回调函数) 

        每匹配到一个正则,就调用一次回调函数,每次回调都会传递以下参数:

          result:本次匹配到的结果

          $1-$9:正则中有多少个()就表示有多少个参数

          offset:记录本次匹配的开始位置

          source:接受匹配的原始字符串

        

 

posted @ 2020-05-28 16:01  simonalwayson  阅读(153)  评论(0)    收藏  举报