• JS 正则表达式


    属性

    一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。

    • ignoreCase:返回一个布尔值,表示是否设置了i修饰符,该属性只读。
    • global:返回一个布尔值,表示是否设置了g修饰符,该属性只读。
    • multiline:返回一个布尔值,表示是否设置了m修饰符,该属性只读。

    另一类是与修饰符无关的属性,主要是下面两个。

    • lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义。
    • source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

    方法

    1. test() 正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。

    /cat/.test('cats and dogs') // true

    2.exec() 正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,成员是每一个匹配成功的子字符串,否则返回null

    var s = '_x_x';
    var r1 = /x/;
    var r2 = /y/;
    
    r1.exec(s) // ["x"]
    r2.exec(s) // null

    exec方法的返回数组还包含以下两个属性:

    • input:整个原字符串。
    • index:整个模式匹配成功的开始位置(从0开始计数)。
    var r = /a(b+)a/;
    var arr = r.exec('_abbba_aba_');
    
    arr // ["abbba", "bbb"]
    
    arr.index // 1
    arr.input // "_abbba_aba_"

    3.字符串对象方法

      a). match():返回一个数组,成员是所有匹配的子字符串。

      b). search():按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。

      c). replace():按照给定的正则表达式进行替换,返回替换后的字符串。

      d). split():按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。

      a). String.prototype.match()字符串对象的match方法对字符串进行正则匹配,返回匹配结果。(设置正则表达式的lastIndex属性,对match方法无效)

    var s = '_x_x';
    var r1 = /x/;
    var r2 = /y/;
    
    s.match(r1) // ["x"]
    s.match(r2) // null

      如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。()

    var s = 'abba';
    var r = /a/g;
    
    s.match(r) // ["a", "a"]
    r.exec(s) // ["a"]

       b). String.prototype.search()字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1

    var r = /x/g;
    r.lastIndex = 2; // 无效
    '_x_x'.search(r) // 1

      上面代码中,正则表达式使用g修饰符之后,使用lastIndex属性指定开始匹配的位置,结果无效,还是从字符串的第一个字符开始匹配。

      c). String.prototype.replace()字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是搜索模式,第二个是替换的内容。

     str.replace(search, replacement)

    搜索模式如果不加g修饰符,就替换第一个匹配成功的值,否则替换所有匹配成功的值。

    'aaa'.replace('a', 'b') // "baa"
    'aaa'.replace(/a/, 'b') // "baa"
    'aaa'.replace(/a/g, 'b') // "bbb"

    replace方法的一个应用,就是消除字符串首尾两端的空格。

    var str = '  #id div.class  ';
    
    str.replace(/^s+|s+$/g, '')
    // "#id div.class"

      d). String.prototype.split()字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。

    str.split(separator, [limit])//该方法接受两个参数,第一个参数是分隔规则,第二个参数是返回数组的最大成员数。

    匹配规则

    1.字面量字符和元字符

      大部分字符在正则表达式中,就是字面的含义,比如/a/匹配a/b/匹配b。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的ab),那么它们就叫做“字面量字符”(literal characters)。

    /dog/.test("old dog") // true
    //上面代码中正则表达式的dog,就是字面量字符,所以/dog/匹配“old dog”,因为它就表示“d”、“o”、“g”三个字母连在一起。

      元字符主要有以下几种:

      a).点字符(.)

        点字符(.)匹配除回车( )、换行( ) 、行分隔符(u2028)和段分隔符(u2029)以外的所有字符。

    /c.t/  
    //
    上面代码中,c.t匹配c和t之间包含任意一个字符的情况,只要这三个字符在同一行,比如cat、c2t、c-t等等,但是不匹配coot。

      b).位置字符

        位置字符用来提示字符所处的位置,主要有两个字符。

        (1). ^ 表示字符串的开始位置

        (2). $ 表示字符串的结束位置

    // test必须出现在开始位置
    /^test/.test('test123') // true
    
    // test必须出现在结束位置
    /test$/.test('new test') // true
    
    // 从开始位置到结束位置只有test
    /^test$/.test('test') // true
    /^test$/.test('test test') // false

      c).选择符(|

       在正则表达式中表示“或关系”(OR),即cat|dog表示匹配catdog

    /11|22/.test('911') // true

      上面代码中,正则表达式指定必须匹配1122

    /a( |	)b/.test('a	b') // true
    //上面代码指的是,a和b之间有一个空格或者一个制表符。

      其他的元字符还包括\*+?()[]{}等,下面分开逐一介绍

      d). 重复类

        模式的精确匹配次数,使用大括号({})表示。{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。

    /lo{2}k/.test('look') // true
    /lo{2,5}k/.test('looook') // true

        上面代码中,第一个模式指定o连续出现2次,第二个模式指定o连续出现2次到5次之间。

      e). 量词符

        量词符用来设定某个模式出现的次数。

        ? 问号表示某个模式出现0次或1次,等同于{0, 1}

          *  星号表示某个模式出现0次或多次,等同于{0,}

         加号表示某个模式出现1次或多次,等同于{1,}

     

  • 相关阅读:
    异常处理
    反射4中内置函数
    property装饰器与继承
    封装
    面向对象编程
    面向对象编程
    项目开发规范
    logging模块
    22. 一个题来探查对 字符串,指针,数组三方面的关联使用方面的概念是否清晰,分析下面三个printf打印什么?
    21. 让指针数组结尾带NULL,使遍历时不依靠计算整个数组大小就可以在结尾遍历结束
  • 原文地址:https://www.cnblogs.com/z-dl/p/8301112.html
Copyright © 2020-2023  润新知