美文网首页
第五章 RegExp类型

第五章 RegExp类型

作者: A郑家庆 | 来源:发表于2018-04-24 11:49 被阅读0次
    • 简述
    • RegExp实例方法
      • exec()
      • test()
    • RegExp构造函数属性

    简述

    正则表达式由普通字符(例如:字符a到z)以及特殊字符(例如:元字符)组成的文字模式。正则表达式作为一个模版,将某个字符模式与所搜索的字符串进行匹配。
    var expression = / pattern /flags
    每个正则表达式都可带有一个或多个标志(flags),用以表明正则表达式的行为。正则表达式的匹配模式支持下列3个标志。
    (1)g:表示全局模式
    (2)i:表示不区分大小写
    (3)m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项(用的比较少,一般用全局模式)。
    模式中使用的所有元字符都必需转义。正则表达式中的元字符包括:
    ( [ { \ ^ $ | ) ? * + . ] }

    http://www.runoob.com/regexp/regexp-metachar.html(这个是菜鸟教程中的元字符解释)

    上面的例子是以字面量来定义的正则表达式,另一种创建正则的方式是使用RegExp构造函数,它接受两个参数:一个是要匹配匹配的字符串模式,另一个是可选的标志字符串,例如:

    // 用字面量创建匹配第一个“bat”或“cat”,不区分大小写
    var pattern1 = /[bc]at/i
    //用构造函数创建
    var pattern1 = new RegExp("[bc]at", "i")
    

    以上两种写法是等价的,要注意的是传递给构造函数的两个参数都必须是字符串。由于RegExp构造函数的模式是字符串,所以在某些情况下要对字符串进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符也是如此,例如\n(字符\在字符串中通常被转义为\,而在正则表达式字符串中就会变成\\,简单的说就是多两倍的\),一般都会用字面两来定义正则表达式。

    RegExp实例方法

    exec()

    RegExp对象的主要方法是exec(),该方法是专门为捕获组而设计的。exec()接受一个字符串参数,返回包含第一个匹配项信息的数组,如果没有返回null,返回的虽然是数组,但是还有两个额外的属性:index和input。其中index表示匹配项在字符串中的位置,而input表示exec()方法的参数,对于exec()方法而言,没有设置全局标志每次都返回第一个匹配项,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项,不过每次都会在字符串中继续查找新的匹配项。例:

    var text = 'mom and mom'
    var pattern = /m/g
    var match = pattern.exec(text)
    console.log(match.index)    // 0
    console.log(match[0])        // m
    console.log(match.input)   // mom and mom
    
    match = pattern.exec(text)
    console.log(match.index)    // 2
    console.log(match[0])        // m
    console.log(match.input)   // mom and mom
    

    test()

    正则表达式的第二个方法是test(),它接收一个字符串参数,返回的是布尔值。

    RegExp构造函数属性

    RegExp构造函数包含一些属性,这些属性适用于所有正则表达式,并且可以通过两种方式访问它们。换句话说,这些属性分别有一个长属性名和一个短属性名,例:

    长属性名        短属性名     说明
    input           $_              最近一次要匹配的字符串
    lastMatch       $&              最近一次的匹配项
    lastParen       $+              最近一次匹配的捕获组
    leftContext     $`             input字符串中lastMatch之前的文本   
    rightContext    $'             input字符串中lastMatch之后的文本
    multiline       $*             布尔值,是否所有表达式都使用多行模式
    

    使用这些属性可以从exec()或test()执行的操作中提取出更具体的信息,例:

    var text = 'mom and mom'
    var pattern = /m/g
    console.log(RegExp.input) 或console.log(RegExp.$_)                  // mom and mom
    console.log(RegExp.leftContext) 或console.log(RegExp["$`"])         // ''
    console.log(RegExp.rightContext)或console.log(RegExp["$'"])         // om and mom
    console.log(RegExp.lastMatch) 或console.log(RegExp["$&"])           // m    
    

    相关文章

      网友评论

          本文标题:第五章 RegExp类型

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