zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计学习笔记6:正则表达式

    一、正则表达式通过RegExp类实现,RegExp对象的构造函数可以带一个或两个参数。第一个参数(或只有一个参数)是描述需要进行匹配的模式字符串,如果还有第二个参数,这个参数则指定了额外的处理指令。

    定义正则表达式:
    1、只匹配字符串中出现的第一个单词"cat";区分大小写
    var reCat = new RegExp("cat"); 
    2、匹配字符串中出现的全部"cat",而不是在找到第一个匹配后就停止;忽略大小写
    var reCat = new RegExp("cat","gi");

    也可以使用Perl风格的语法:
    var reCat = /cat/gi;


    二、创建一个RegExp对象后,把它应用到字符串上。RegExp和String的一些方法都可使用。

    1、RegExp有个test()方法,如果给定字符串匹配这个模式,它就返回ture,否则返回false。

        var sToMatch = "a fat cat";
        var reCat = /at/;   
        alert(reCat.test(sToMatch));   //true


    2、String对象的match()方法返回一个包含在字符串中的所有匹配的数组

        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /at/gi;
        alert(sToMatch.match(reAt));  //at,at,At,aT,at,
       
    3、String对象的search()方法返回在字符串出现的第一个匹配的位置,全局匹配正则表达式(带参数g)在使用search()时不起作用

        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /at/gi;
        alert(sToMatch.search(reAt));  //3

    4、扩展的字符串方法,replace()可以用用另一个字符串(第二个参数)来替换某个子串(第一个参数)的所有匹配。可以给第一个参数传递一个正则表达式

        var sToChange = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /at/gi;
        alert(sToChange.replace(reAt, "dog")); //a bdog, a Cdog, a fdog bdog, a fdog cdog


    三、字符类是用于测试的字符的组合。通过将一些字符放入方括号[]中,可以去匹配第一个字符、第二个字符等等。
    1、简单类,匹配方括号中的字符

          var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /[ab]at/gi;
        alert(sToMatch.match(reAt));

    2、负向类,匹配方括号中除了^后面的字符

        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /[^ab]at/gi;
        alert(sToMatch.match(reAt));  //Cat,fAt,faT,cat
    3、范围类,匹配方括号中用横线“-”连起来的从什么到什么

        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
        var reAt = /[a-c]at/gi;
        alert(sToMatch.match(reAt));  //bat,Cat,baT,cat
    4、组合类,由几种其它的类组合而成的字符类

        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat,123at";
        var reAt = /[a-c1-3]at/gi;
        alert(sToMatch.match(reAt));  //bat,Cat,baT,cat,3at
    5、预定义页,由于某些模式会反复用到,所以用一组预定义类可以更方便地指定复杂类

        代码        等同于        匹配
        .        [^\n\r]        除了换行和回车之外的任意字符
        \d        [0-9]        数字
        \D        [^0-9]        非数字字符
        \s        [\t\n\x0B\f\r]  空白字符
        \S        [^\t\n\x0B\f\r]    非空白字符
        \w        [a-zA-Z_0-9]     单词字符(所有的字母、所有的数字和下划线)
        \W        [a-zA-Z_0-9]     非单词字符                       

               

    四、量词,可以指定某个特定模式出现的次数。

        代码        描述
        ?        出现零次或一次
        *        出现零次或多次(任意次)
        +        出现一次或多次(至少出现一次)
        {n}        一定出现n次
        {n,m}        至少出现n次但不超过m次
        {n,}        至少出现n次
           
    五、分组,通过用一系列括号包围一系列字符、字符类以及量词来使用。

        var sToMatch = "123123abcabcabc";
        var re = /(123){2}(abc)?/gi;
        alert(sToMatch.match(re));   //123123abc

    例子:

    var str = "123<div>456</div>789";
    str = str.replace(/<div[\s\S]*?<\/div>/, ""); //去掉div及其中内容,结果123789

  • 相关阅读:
    关于-webkit-border-image的理解
    手机浏览pc网页,字体显示比样式中设置的字体更大
    网页乱码原理
    浏览器的钉点调试的作用
    zepto中的多点触摸
    parentNode和offsetParent的区别,仅仅只是定位相对不一样么
    ckeckbox的默认样式,label for添加toggle后失效,美化checkbox
    当stop()遇到animate()的回调函数
    有联系的标识变量的变化一定要同步
    当relative遇上z-index,半透明度不阻断事件捕获
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086915.html
Copyright © 2011-2022 走看看