JS正则表达式学习总结

JS正则:java RegExp对象,它是对字符串执行模式匹配的强大工具。运用最多的就是在输入处验证输入的字符串是否合法,指定用户输入字符串的格式。

定义方法:

  1:直接量语法:var re=/pattern/attributes

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

    pattern:这里可以是字符串,也可以是正则表达式对象。            //注:当使用创建RegExp对象法时,如果pattern是正则表达式,则不用写第二个参数。

    attributes:匹配方式。它只有三个参数:i,g,m。  i:表示不区分大小写匹配。g:查找所有匹配,而非查找到第一个就停止。m:多行匹配。

  例:var re=/a/ig   var re=new RegExp("a","ig")        //表示匹配所有的a和A。这两种写法是一样的。

正则表达式的定义规则(这里主要讲如何书写pattern参数):

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

    var re=/[a-z]/         //表示满足小写a-z的字符串        如:a34vas3

    var re1=/[abc][def0-9]/    //表示两个满足条件并且要相邻的字符串   如:5a8zcf

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

    var re =/[a-z]{3}/       //表示要有连续的三个小写字母的字符串     如:t34bgp5jip8

    var re1=/[a]{1-3}/      //表示满足连续三个a的字符串       如:rgb89aaacd

    var re2=/[a]{1,3}/      //逗号,表示或者的意思           如:rabcaaadaa

  3:小括号():表示提取字符串,匹配到的字符串可以通过$0-9可获取匹配的字符串,这个会在后面的例子中介绍到。

  4:^符号:

    4.1表示匹配一个字符串的开头     var  re=/^[a-z]/    //表示以小写字母开头的字符串     如:a45jdkl

    4.2如果^符号出现在[]中的第一个字符位置,表示不包含此字符串   var re=/[^a]    //表示字符串中不能有a   如:rgb123

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

    var re=/d$/        //表示以d结尾的字符串        如:abcd

  6:转义字符 \ 

字符 描述 备注
. 查找单个字符,除了换行和行结束符。  
\w 查找单词字符 等价于[A-Za-z0-9]
\W 查找非单词字符 等价于[^A-Za-z0-9]
\d 查找数字。 等价于[0-9]
\D 查找非数字字符。 等价于[^0-9]
\s 查找空白字符。 包括空格、TAB、换页符
\S 查找非空白字符。  
\b 匹配单词边界  
\B 匹配非单词边界。  
\0 查找 NUL 字符。  
\n 查找换行符。  
\f 查找换页符。  
\r 查找回车符  
\t 查找制表符。  
\v 查找垂直制表符。  
\xxx 查找以八进制数 xxx 规定的字符。  
\xdd 查找以十六进制数 dd 规定的字符。  
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。  

  7:量词  

量词 描述 例子
n+ +号表示匹配任何包含至少一个 n 的字符串 var re=/\d+/  如:abc1de234fg56
n* 匹配任何包含零个或多个 n 的字符串。 var re=/ab*/  如:a123abb
n? 匹配任何包含零个或一个 n 的字符串 var re=/do(es)?/  如:doAnddoes
n{X} 匹配包含 X 个 n 的序列的字符串。 var re=/[0-9]{2}/  如:a12b34c56
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。 var re=/[0-9]{2,3}/  如:a12b345
n{X,} 匹配包含至少 X 个 n 的序列的字符串。 var re=/[0-9]{2,}  如:a12b345c6789
?=n 匹配任何其后紧接指定字符串 n 的字符串 var re=/a(?=12|34)  如:a12a34a67
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。 var re=/a(?!12|34)  如a66a77a12

一些常用的javaScript正则表达式:

  1:用户名正则

    var userPattern=/^[a-zA-Z0-9-_]{4-16}$/                //用户名只能由4-16位的大小写字母、数字、-、_组成

  2:密码强度正则

    var passPattern=/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?]).*$/    //至少是有6位,必须至少要有一个数字、大小写字母,特殊字符

  3:整数正则

    var intPattern=/^\d+$/正整数  var intPattern1=/^-\d$/负整数     var intPattern2=/^-?\d$/所有整数

  4:Email正则

    var emailPattern=/^([a-zA-Z0-9_\-\.])+\@([a-zA-Z0-9_\-\.])+\.([a-zA-Z]{2-4})$/    //注:这里的+号不是连接,而是与前面的小括号连接,表示要有一个或多个字符

  5:中文正则

    var chinesePattern=/^[\u4e00-\u9fa5]+$/

  6:手机号码正则

    var iphonePattern=/^(1[0-9]{10})$/

  这里只列举了一部分常用的正则,如有需要可查看更多正则:http://www.jqhtml.com/6915.html    //日期正则,身份证正则,URL正则,IPV4正则等。

正则表达式的方法:

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

    格式:正则.test(字符串);

    emailPattern.test("123_456@qq_mail.com")    //返回true

  2:search()方法:搜索符合正则的第一次出现的位置,若搜索到返回第一次出现的位置,否则返回-1。

    格式:字符串.search(正则);

    var str="[email protected]";    str.search(/@/);  //返回4

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

    格式:字符串.match(正则);

    "123ab45cd678".match(/\d+/g);    //返回 [123,45,678],若这里不是全局匹配则返回["123",index:0,"123ab45cd678"],就只会返回第一个

  4:exec()方法:捕获符合正则的字符串,若捕获到符合正则的字符串返回一个Array的实例,但它包含了两个额外的属性index和input。index表示符合正则字符串出现的位置;input表示字符串表达式的字符串。

    格式:正则.exec(字符串)

    var textArray=/.bc/.exec("abc12abc3abc45");      //textArray.index=0;textArray.input="abc12abc3abc45";textArray[0]=abc;

    var textArray=/.bc/g.exec("abc12bbc3cbc45");      //textArray.index=0;textArray[0]="abc";textArray[1]="bbc";textArray[2]="cbc";

  5:replace方法:用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

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

    5.1字符串.replace(字符串,字符串|回调函数)      //这里回调函数必须返回的是一个字符串

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

    5.2字符串.replace(正则,字符串)

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

    5.3字符串.replace(正则,回调函数)

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

        result:本次匹配到的结果

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

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

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

      replace搭配JS正则的一些案例:

        5.3.1:去掉字符串两边的空格

        "   abc   ".replace(/(^\s+)|(\s+$)/g,function(){

          return "";

        })

        5.3.2:提取URL中的参数和参数值

          var obj={};

          var url="www.emilzs.com/action?name=emilzs&age=18"

          url.replace(/([^&=]+)=([^&=]*)/gi,function(rs,$1,$2){

            obj[$1]=$2;                  //注:当第一次匹配到正则时$1为name,$2为emilzs。当第二次匹配到正则时$1为age,$2为18

          })      

        5.3.4:在指定位置插入新字符串

          str.replace(/(.{3})/,function(rs,$1){

            return $1+"xyz";                  //注:其实这种方法的意思就是将str字符串前3个字符替换成前3个字符+"xyz"

          })

        5.3.5:将电话号码加密

          var str=number.slice(3,7);

          number.replace(new RegExp(str,g),"******");      15123456789  -->   151*****789

猜你喜欢

转载自www.cnblogs.com/EmilZs/p/9269276.html