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="abcd@mail.com";    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值