• JS引用类型之——RegExp


    前言

    之前小猪分享过关于正则表达式的一些内容,具体请看传送门,今天小猪来分享怎么在js中使用正则表达式。

    定义

    ECMAScript通过RegExp类型来支持正则表达式。使用下面类似Perl的语法,就可以创建一个正则表达式。

    var expression = |pattern |flags;

    其中的模式(pattern)部分可以是任何简单或复制的正则表达式,可以包含字符串、限定符、分组、向前查找以及反向引用。每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为。

    RegExp实例属性

    RegExp对象的属性分为静态属性和实例属性。下面分别进行介绍。

    1.1   静态属性

    (1)index属性。是当前表达式模式首次匹配内容的开始位置,从0开始计数。其初始值为-1,每次成功匹配时,index属性都会随之改变。

    (2)input属性。返回当前所作用的字符串,可以简写为$_,初始值为空字符串""。

    (3)lastIndex属性。是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数,常被作为继续搜索时的起始位置,初始值为-1,表示从起始位置开始搜索,每次成功匹配时,lastIndex属性值都会随之改变。

    (4)lastMatch属性。是当前表达式模式的最后一个匹配字符串,可以简写为$&。其初始值为空字符串""。在每次成功匹配时,lastMatch属性值都会随之改变。

    (5)lastParen属性。如果表达式模式中有括起来的子匹配,是当前表达式模式中最后的子匹配所匹配到的子字符串,可以简写为$+。其初始值为空字符串""。每次成功匹配时,lastParen属性值都会随之改变。

    (6)leftContext属性。是当前表达式模式最后一个匹配字符串左边的所有内容,可以简写为$`(其中“'”为键盘上“Esc”下边的反单引号)。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。

    (7)rightContext属性。是当前表达式模式最后一个匹配字符串右边的所有内容,可以简写为$’。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。

    (8)$1…$9属性。这些属性是只读的。如果表达式模式中有括起来的子匹配,$1…$9属性值分别是第1个到第9个子匹配所捕获到的内容。如果有超过9个以上的子匹配,$1…$9属性分别对应最后的9个子匹配。在一个表达式模式中,可以指定任意多个带括号的子匹配,但RegExp对象只能存储最后的9个子匹配的结果。在RegExp实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果。

    1.2   实例属性

    (1)global属性。返回创建RegExp对象实例时指定的global标志(g)的状态。如果创建RegExp对象实例时设置了g标志,该属性返回True,否则返回False,默认值为False。

    (2)ignoreCase属性。返回创建RegExp对象实例时指定的ignoreCase标志(i)的状态。如果创建RegExp对象实例时设置了i标志,该属性返回True,否则返回False,默认值为False。

    (3)multiLine属性。返回创建RegExp对象实例时指定的multiLine标志(m)的状态。如果创建RegExp对象实例时设置了m标志,该属性返回True,否则返回False,默认值为False。

    (4)source属性。返回创建RegExp对象实例时指定的表达式文本字符串。

    RegExp实例方法

    RegExp对象的常用方法有test、exec和compile,本节介绍这些方法的功能和用法。最后,对RegExp对象的属性和方法进行一个综合举例。

    2.1   test方法

    语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。

    var patt1=new RegExp("e");
    
    document.write(patt1.test("The best things in life are free")); 

    由于该字符串中存在字母 "e",以上代码的输出将是:

    true

    2.2   exec方法

    语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。

    var patt1=new RegExp("e");
    
    document.write(patt1.exec("The best things in life are free")); 

    由于该字符串中存在字母 "e",以上代码的输出将是:

    e

         如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。

         如果没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。

    如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。

    var patt1=new RegExp("e","g");
    do
    {
        result=patt1.exec("The best things in life are free");
        document.write(result);
    }
    while (result!=null) 

    由于这个字符串中 6 个 "e" 字母,代码的输出将是:

    eeeeeenull

    exec方法返回的数组有3个属性,分别是input、index和lastIndex。

         input属性是整个被搜索的字符串。

         index属性是指匹配在整个被搜索字符串中的位置。

         lastIndex属性是指匹配的子字符串的最后一个字符的下一个字符位置。

    下面代码是对该方法的应用举例。

    代码exec()方法应用:2.2.3.htm

    <html>
      
    <head>
      
    <title>exec()方法应用</title>
      
    <script language = "JavaScript">
      
        var myString="aaa 111 bbb 222 ccc 1111 222ddd";
      
        var regex = /111/;     //创建正则表达式对象
      
        var array=regex.exec(myString);
      
        if (array){
      
              var str="找到了匹配子串!"+"
    返回数组的值为:"+array+"
    数组元素个数:"
      
                              +array.length+"
    被搜索的字符串为:"+array.input
      
                              +"
    匹配子串的开始位置为:"+array.index
      
                              +"
    匹配子串后面第一个字符的位置为:"+regex.lastIndex;
      
                      alert(str);
      
              }
      
              else{
      
                      alert("未找到匹配子串!!");
      
              }
      
    </script>
      
    <body></body>
      
    </html>

    RegExp构造函数属性

  • 相关阅读:
    字王20年
    [转]Birdfont 2.10 发布,字体编辑器
    vs2013编译boost库
    c++ 完成端口资料
    获取输入法输入内容及后选项的钩子
    unicode string和ansi string的转换函数及获取程序运行路径的代码
    c++实现输入法窗口自定义的代码
    在固定长方形里产生渐变
    监听某个div或其它标签的大小改变来执行相应的处理
    64位SqlServer通过链接服务器与32位oracle通讯
  • 原文地址:https://www.cnblogs.com/smallerpig/p/3646167.html
Copyright © 2020-2023  润新知