zoukankan      html  css  js  c++  java
  • RegExp正则相关方法

    一、概述

    正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本。
    比如,正则表达式给出一个 Email 地址的模式,然后用它来确定一个字符串是否为 Email 地址。JavaScript 的正则表达式体系是参照 Perl 5 建立的。

    新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。

    var regex = /xyz/;

    另一种是使用RegExp构造函数。

    var regex = new RegExp('xyz');

    实际应用中,基本上都采用字面量定义正则表达式。

    二、实例属性

    正则对象的实例属性分成两类

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

    RegExp.prototype.ignoreCase:返回一个布尔值,表示是否设置了i修饰符。
    RegExp.prototype.global:返回一个布尔值,表示是否设置了g修饰符。
    RegExp.prototype.multiline:返回一个布尔值,表示是否设置了m修饰符。

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

    RegExp.prototype.lastIndex:返回一个数值,表示下一次开始搜索的位置。该属性可读写,但是只在进行连续搜索时有意义,详细介绍请看后文。

    RegExp.prototype.source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

    三、正则的实例方法

    (1) RegExp.prototype.test()
    正则实例对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。
    
    (2) RegExp.prototype.exec()
    正则实例对象的exec方法,用来返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null。
        var s = '_x_x';
        var r1 = /x/;
        var r2 = /y/;
    
        r1.exec(s) // ["x"]
        r2.exec(s) // null
        正则对象r1匹配成功,返回一个数组,成员是匹配结果;正则对象r2匹配失败,返回null。
        如果正则表示式包含圆括号(即含有“组匹配”),则返回的数组会包括多个成员。
        第一个成员是整个匹配成功的结果,后面的成员就是圆括号对应的匹配成功的组。也就是说,
        第二个成员对应第一个括号,第三个成员对应第二个括号,以此类推。
        整个数组的length属性等于组匹配的数量再加1。
    
        exec方法的返回数组还包含以下两个属性:
        input:整个原字符串。
        index:整个模式匹配成功的开始位置(从0开始计数)。
    
    

    四、字符串的实例方法

    String.prototype.match():返回一个数组,成员是所有匹配的子字符串。
    String.prototype.search():按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。
    String.prototype.replace():按照给定的正则表达式进行替换,返回替换后的字符串。
    String.prototype.split():按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员

    (1) String.prototype.match():

    字符串实例对象的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"]
    
    

    (2)String.prototype.search()

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

    (3) String.prototype.replace()

    字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是正则表达式,表示搜索模式,
    第二个是替换的内容。
    
    正则表达式如果不加g修饰符,就替换第一个匹配成功的值,否则替换所有匹配成功的值。
    'aaa'.replace('a', 'b')     // "baa"
    'aaa'.replace(/a/, 'b')     // "baa"
    'aaa'.replace(/a/g, 'b')    // "bbb"
    
    replace方法的一个应用,就是消除字符串首尾两端的空格。
    
    
    

    (4)String.prototype.split()

    字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。
    // 例一
    'aaa*a*'.split(/a*/)     // [ '', '*', '*' ]
    
    // 例二
    'aaa**a*'.split(/a*/)    // ["", "*", "*", "*"]
    
    上面代码的分割规则是0次或多次的a,由于正则默认是贪婪匹配,
    所以例一的第一个分隔符是aaa,第二个分割符是a,将字符串分成三个部分,包含开始处的空字符串。
    例二的第一个分隔符是aaa,第二个分隔符是0个a(即空字符),
    第三个分隔符是a,所以将字符串分成四个部分。
    
    如果正则表达式带有括号,则括号匹配的部分也会作为数组成员返回。
    'aaa*a*'.split(/(a*)/)  // [ '', 'aaa', '*', 'a', '*' ]
    
    正则表达式使用了括号,第一个组匹配是aaa,第二个组匹配是a,它们都作为数组成员返回。
    
    
  • 相关阅读:
    shell生成随机数 shell脚本生成随机数作为kafka的生产者
    使用Azkaban调度Spark任务
    Azkaban3.57.0的编译安装以及简单使用
    centos上安装gradle
    azkaban(版本2.5.0)安装
    261 相对布局之1— 相对布局的作用
    260 线性布局之3—线性布局案例演示
    259 线性布局之2—线性布局的使用
    258 线性布局之1—线性布局的作用
    257 布局基础之3—添加布局的方式
  • 原文地址:https://www.cnblogs.com/kgwei520blog/p/13793312.html
Copyright © 2011-2022 走看看