美文网首页
正则表达式-javascript

正则表达式-javascript

作者: 宅小壮 | 来源:发表于2015-05-07 16:57 被阅读129次

    前言

    由于经常被正则虐,看见就不知如何处理,已断断续续学习过一些,但是一段时间没有接触就连最基本的东西也忘了,原因就是不系统,也没有实战。现在把正则表达式整理一下,方便以后的学习和实践中掌握。

    正则表达式在线测试

    1. 什么是正则表达式

    正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。

    正则表达式是一个高效匹配检测的东西,对于表单检测,高亮显示搜索结果还是进行URL的地址映射,一般都需要用到它。


    2. ReqExp

    这一块是基于《javascript高级程序设计的第三版》整理部分。
    ECMAScript是通过ReqExp类型来支持正则表达式

    构造正则表达式的方法
    • 以字面量的形式来定义(method1)
    • 使用ReqExp构造函数(method2)
    //pattern就是一个正则表达式。
    //flags用于表达正则行为的标志。
    
    //以字面量的形式来定义
    var expression = /pattern/flags; 
    //构造函数
    var expression = new ReqExp("pattern","flags"); 
    
    
    flags标志 作用
    g 全局模式,匹配将用于所有的字符串
    i 匹配不区分大小写
    m 模式

    元字符

    在正则表达式中有一些特殊的字符符号我们是不能直接使用的,必须对其进行转义后才能使用。如“\”,因为这些字符在正则表达式中有特殊的语法含义,这类字符被称为元字符,正则表达式中的元字符有:

    ([{\^$|)?*+.]}都属于元字符
    

    如果要在正则表达式中直接匹配这些元字符,需要对它们转义。

    • 由于是直接字面量,所以转义就ok了。(method1)
    • 参数都是字符串,所以涉及到双重转义。(method2)
    等价关系
    ReqExp的实例属性
    属性名称 说明
    global 表示是否设置了g标志,返回boolean值
    ignoreCase 表示是否设置了i标志,返回boolean值
    lastIndex 表示开始搜索下一个匹配项的字符位置,从0开始,返回的是整数。
    multiline 表示是否设置了m标志,返回boolean值
    source "字面量"的形式返回正则表达式。

    之前的这些属性其实用于不大,就当了解吧。

    ReqExp实例方法---exec( )主力

    exec(应用模式的字符串 ),返回包含第一个匹配项信息的数组,但是这个数组有两个额外的属性indexinput

    • index 表示匹配项在字符串中的位置。
    • input 表示应用正则表达式的字符串。
    • 数组 第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。

    注意:使用的exec()方法的时候设置和不设置g标志是有区别的。

    设置g 不设置g
    每次调用exec( )都会在字符串中寻找新的匹配项 始终只是返回第一个匹配项的信息。

    练练手

    //eg1:
    <script type="text/javascript">
        var text = "cat, bat, sat, fat";
        var pattern1 = /.at/;
        var matches = pattern1.exec(text);
        console.log(matches.index);
        console.log(matches[0]);
        console.log(pattern1.lastIndex);
    
        //还有一组返回的也是一样的。
    </script>
    
    eg1的返回结果
    //eg2:
        var pattern2 =  /.at/g;
        var matches = pattern2.exec(text);
        console.log(matches.index);
        console.log(matches[0]);
        console.log(pattern2.lastIndex);
    
        var matches = pattern2.exec(text);
        console.log(matches.index);
        console.log(matches[0]);
        console.log(pattern2.lastIndex);
    
    eg2返回的结果

    很明显可以看到两者的差别。

    IE的javascript实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会变化。


    test( 字符串)

    • 模式与该参数匹配返回true
    • 不匹配就返回false

    基于此,test( )一般是用在if语句中的。

        var text = "000-00-0000"
        var pattern = /\d{3}-\d{2}-\d{4}/;
        if(pattern.test(text)){
            console.log("matched");
    //很明显会在chorme的控制台console中输出matched
    

    继承的方法

    方法 返回
    toLocaleString( ) /toString() 返回匹配正则表达式的字面量。
    valueOf( ) 返回正则表达式本身
    //eg3:
        var pattern = new RegExp("\\[bc\\]at","g");
        console.log(pattern.toLocaleString());
        console.log(pattern.toString());
        console.log(pattern.valueOf());
    
    eg3返回的结果

    以上就把正则在javascript中的大致整理了下,下面就主要整理正则表达式中的(pattern)写法以及常用元字符的功能。


    3. 元字符整理

    元字符(常用) 说明
    . 匹配除了换行符以外的任意字符
    \w 匹配字母或数字或下划线或汉字
    \s 匹配任意的空白符
    \d == [0-9] 匹配数字
    \b 匹配单词的开始或结束
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    元字符(重复) 说明
    * 重复0次或更多次
    + 重复一次或更多次
    重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n, m} 重复n到m次
    //写一个正则可以匹配谷歌的三种网址
    var gogle = "www.gogle.com";
    var google = "www.google.com";
    var gooogle = "www.gooogle.com";
    var pattern = /w{3}\.go{1,3}gle\.com/i; ok
    
    元字符() 说明
    () 分组
    markdown制作表格的竖 表示分枝
    [ ] 表示选择里面的任意一个
    (\d{1,3}\.){3}\d{1,3} 简单的ip匹配,但是大于255也可以匹配到;
    改进:
    ((2[0-4])\d | 25[0-5] | [01]\d\d)\. ){3}(2[0-4])\d | 25[0-5] | [01]\d\d)
    | 表示的分枝
    
    元字符(反义) 说明
    \W == [0-9A-Za-z_汉字] 匹配任意不是字母,数字,下划线,汉子的字符
    \S 匹配任意不是空白符的字符
    \D == [^0-9] 匹配任意的非数字的字符
    \B 匹配不是单词开头或者结尾的位置
    ^x 匹配除了x意外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母意外的任意字符

    到此打住,关于后向引用,零宽断言,负向零宽断言,贪婪与懒惰先不整理。


    参考


    实战区域

    会不定期的整理实战在这个部分。

    相关文章

      网友评论

          本文标题:正则表达式-javascript

          本文链接:https://www.haomeiwen.com/subject/kfaifttx.html