版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/zkn_CS_DN_2013/article/details/24243159



RegExp对象的经常用法有test、exec和compile,本节介绍这些方法的功能和用法。

最后,对RegExp对象的属性和方法进行一个综合举例。

2.1  test方法

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

 

2.2  exec方法

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

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

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

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

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

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

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

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

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

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

<html>

<head>

<title>exec()方法应用</title>

<scriptlanguage = "JavaScript">

    varmyString="aaa 111 bbb 222 ccc 1111 222ddd";

    varregex =/111/;    //创建正則表達式对象

    vararray=regex.exec(myString);

    if(array){

         var
str="找到了匹配子串!"+"\n返回数组的值为:"+array+"\n数组元素个数:"

                         +array.length+"\n被搜索的字符串为:"+array.input

                         +"\n匹配子串的開始位置为:"+array.index

                         +"\n匹配子串后面第一个字符的位置为:"+regex.lastIndex;

                 alert(str);

         }

         else{

                 alert("未找到匹配子串。!");

         }

</script>

<body></body>

</html>

2.3  compile方法

语法格式为compile("pattern"[,"flags"])。该方法能够更换RegExp对象实例所使用的表达式模式,并将新的表达式模式编译为内部格式,从而使以后的匹配过程运行更快。假设要在循环中反复使用某个表达式,对其进行编译将使运行加速。可是,假设在程序中使用了不论什么其它表达式模式后,再使用原来编译过的表达式模式,则这样的编译毫无  益处。

2.4   综合举例

代码2.2是对RegExp对象的综合举例,认真分析代码及其运行结果。能够更好地理解RegExp对象。

代码2.2  RegExp对象的使用:2.2.htm

<scriptlanguage="javascript">

      var
strSrc = "xxa1b01c001yya2b02c002zz
";

      var
re = /a(\d)b(\d{2})c(\d{3})/gi;

      var
arr, count = 0;

      while
((arr = re.exec(strSrc)) != null)

      {

             displayResult();

      }

      function
displayResult()

      {

             document.write("<p>这是用正則表達式/"
+ re.source + "/gi对字符串<br>""

                   +
RegExp.input + ""进行第" + (++count) + "次搜索的结果:<br>");

             document.write("RegExp.index为"
+ RegExp.index + "<br>");

             document.write("RegExp.lastIndex为"
+ RegExp.lastIndex + "<br>");

             document.write("RegExp.lastMatch为"
+ RegExp.lastMatch + "<br>");

             document.write("RegExp.lastParen为"
+ RegExp.lastParen + "<br>");

             document.write("RegExp.leftContext为"
+ RegExp.leftContext + "<br>");

             document.write("RegExp.rightContext为"
+ RegExp.rightContext +"<br>");

             document.write("RegExp.$1为"
+ RegExp.$1 + "<br>");

             document.write("RegExp.$2为"
+ RegExp.$2 + "<br>");

             document.write("RegExp.$3为"
+ RegExp.$3 + "<br>");

             document.write("RegExp.$4为"
+ RegExp.$4 + "<br>");

             document.write("arr.index为"
+ arr.index + "<br>");

             document.write("arr.input为"
+ arr.input + "<br>");

             document.write("arr.lastIndex为"
+ arr.lastIndex + "<br>");

             document.write("返回数组的元素个数为"
+ arr.length + "<br>");

             document.write("返回数组的内容为["];

             for(var
i=0; i<arr.length; i++)

             {

                 if(i
< arr.length-1)

                     document.write("""
+ arr[i] + "",");

                 else

                     document.write("""
+ arr[i] + "")</p>");

             }

      }

</script>

JS之RegExp对象(二)的更多相关文章

  1. 前端之JavaScript:JS之DOM对象二

    继续JS之DOM对象二 前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement(' ...

  2. 原生JS:RegExp对象详解

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. JS之RegExp对象(一)

    JavaScript提供了一个RegExp对象来完毕有关正則表達式的操作和功能,每一条正則表達式模式相应一个RegExp实例.有两种方式能够创建RegExp对象的实例.      使用RegExp的显 ...

  4. 继续JS之DOM对象二

    前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...

  5. JS之DOM对象二

    前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...

  6. js进阶正则表达式实现过滤字符串(RegExp对象操作正则表达式)(正则:regular)(表达式:expression)

    js进阶正则表达式实现过滤字符串(RegExp对象操作正则表达式)(正则:regular)(表达式:expression) 一.总结 1.str_replace:正则作用:高效快速匹配 2.break ...

  7. js进阶正则表达式13RegExp对象方法(RegExp对象的方法:compile,test,exec)(子表达式 var reg1=/([a-z]+)\d/)

    js进阶正则表达式13RegExp对象方法(RegExp对象的方法:compile,test,exec)(子表达式 var reg1=/([a-z]+)\d/) 一.总结 1.RegExp对象有三个方 ...

  8. js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译)

    js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译) 一.总结 1. RegExp的属性和方法,就是RegE ...

  9. JS RegExp对象(正则表达式)

    笔记整理自:廖雪峰老师的JS教程 正则表达式语法:https://www.runoob.com/regexp/regexp-tutorial.html 目录 创建方式 方式一 方式二 简单使用 判断正 ...

随机推荐

  1. LeetCode(66)Plus One

    题目 Given a non-negative number represented as an array of digits, plus one to the number. The digits ...

  2. HDU 1242 Rescue 营救天使

    Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is describe ...

  3. 数据结构实验4:C++实现循环队列

    实验4 4.1 实验目的 熟练掌握队列的顺序存储结构和链式存储结构. 熟练掌握队列的有关算法设计,并在循环顺序队列和链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 4.2 实验要求 ...

  4. Java学习之并发多线程理解

    1.线程简介: 世间万物会同时完成很多工作,如人体同时进行呼吸.血液循环.思考问题等活动,用户既可以使用计算机听歌也可以使用它打印文件,而这些活动完全可以同时进行,这种思想在Java中称为并发,而将并 ...

  5. luogu2633 Count on a tree

    主席树放到树上而已 #include <algorithm> #include <iostream> #include <cstdio> using namespa ...

  6. sqlserver建dblink

    --建立连接exec sp_addlinkedserver'ITSV' ,'' , 'SQLOLEDB' ,'IP地址不加端口' exec sp_addlinkedsrvlogin'ITSV' ,'f ...

  7. [转]maven编译时出现读取XXX时出错invalid LOC header (bad signature)

    maven编译时出现读取XXX时出错invalid LOC header (bad signature) 一.发现问题右击pom.xml,run as —> maven install,会看到c ...

  8. [USACO13NOV]空荡荡的摊位Empty Stalls

    题目描述 Farmer John's new barn consists of a huge circle of N stalls (2 <= N <= 3,000,000), numbe ...

  9. poj——2771 Guardian of Decency

    poj——2771    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5916   ...

  10. openstack swift memcached

    如果生成的token总变,说明没有启动memcached: swift@vincent-virtual-machine /usr/bin $ memcached -p 11211 -m 64m -d ...