zoukankan      html  css  js  c++  java
  • Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型

    JS中处理字符串最常用的应该就是正则了

    同样正则(RegExp)类型也是JS中引用类型的一种

    ECMAScript通过 RegExp类型 来支持正则表达式

    创建正则

    var expression = / pattern / flags;

    在上面创建正则实例中 pattern 部分可以是任意简单或复杂的正则表达式,每个正则表达式可以有一个或多个 flags 来标明正则的行为

    使用构造函数创建

    var expression = new RegExp("pattern","flags"); // 接收两个字符串参数

    PS. 由于该构造函数的参数为字符串,所以需要双重转义

    比如:

    / [bc]at / 等效于 "\[bc\]at"

    两种创建方式的区别在于(ES3中存在该区别,ES5两者没有区别):

    字面量(表达式)创建的正则会共享一个正则实例,而构造函数每次都会创建一个新的实例

    对于上述差异我在使用IE11仿真IE5时并未体现出有此差异,这一点大家看看就好

    正则支持以下3种标志(ES5)

    g:全局模式即找到匹配项后仍会继续向后查找,直到扫描完整个字符串

    i :不区分大小写模式、即在正则匹配时忽略正则的大小写

    m:多行模式,即一行文本匹配完成后继续匹配下一行

    元字符:

    元字符就是指在正则中具有特殊功能的字符,如果希望正则匹配这些字符,那么则需要对这些字符进行转义

    ( [  { ^ $ | ) ? * + . ] }

    RegExp的实例属性

    每个正则实例都有以下属性:

    global:是否为全局匹配

    ignoreCase:是否忽略大小写

    lastIndex:开始下一次搜索的起始位置

    multiline:是否多行匹配

    source:正则表达式的字符串表示,格式为字面量形式

    以上属性虽然详细描述了正则状态,但是实际用处并不大,因为在创建这些实例时我们已经显式地声明了这些信息

    RegExp的实例方法

    exec()该方法主要为捕获组设计,接收一个参数即要应用正则规则的字符串

    返回一个带有index、input属性的Array实例

    index属性表示匹配项在整个字符串中的位置

    input 属性表示该方法传入的参数字符串也就是“输入”

    对于返回的Array实例第一项是与正则规则匹配的字符串

    其它项是正则捕获组匹配的字符串

    没有匹配项返回null

    PS.对于全局模式每次也只返回一个匹配项,重复调用会从上次停止的地方继续,直到比对完整个字符串;对非全局模式的重复调用结果始终的匹配的第一个

    test()该方法主要用于我们不关心匹配项是什么只关心是否匹配的情况

    接收一个参数即需要匹配的字符串,返回true或false,一般用于条件判断中

    继承方法:

    关于RegExp继承自Object 的方法

    1. toLocaleString、toString 都会返回正则表达式的字面量

    2.valueOf 返回正则本身

    RegExp构造函数属性

    这些属性的值会根据最近一次正则匹配的结果而有所变化

    这些属性都有两种访问方式,一种是长属性,一种是短属性

    长属性                    短属性                              内容

    input                         $_                        最近一次匹配的字符串

    lastMatch                 $&                            最近一次的匹配项

    lastParen                  $+                        最近一次的匹配的捕获组

    leftContext                $`                            lastMatch之前的文本

    multiline                    $*                     是否所有表达式都是多行模式(该属性已废除)

    rightContext              $'                            lastMatch之后的文本

    PS. 对于短属性中无效的ECMA字符需要使用中括号来访问 如 RegExp["$`"]

    除此而外就算test方法只返回 Boolean 其他的相应属性也会在上面的属性获取到

    PS. $1~$9分别对应9个捕获组

    Js中正则的局限性

    JS中的正则虽然比较完备,但是仍缺少一些语言(Perl)所支持的高级正则表达式的特性

    1.向后查找

    2.交集并集

    3.原子组

    4.命名捕获组

    5.s单行  x无间隔 模式

    6.条件匹配

    7.正则表达式注释

    以上就是JS中正则的部分,详情见MDN

    即便如此,JS中的正则对象还是能够满足我们平时绝大部分的匹配任务

  • 相关阅读:
    原生js ajax与jquery ajax的区别
    ajax的五大步骤
    js中setTimeout()时间参数设置为0的探讨
    js数组与字符串的相互转换方法
    javascript的三个组成部分
    linq 获取不重复数据,重复数据 var unique = arr.GroupBy(o => o).Where(g => g.Count() == 1) .Select(g => g.ElementAt(0));
    C# 随机 抽奖 50个随机码 不重复
    聚集索引和非聚集索引 聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。
    WPF ControlTemplate,DataTemplate
    C# 实现 奇数偶数排序,奇数在前,偶数在后
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10136313.html
Copyright © 2011-2022 走看看