版权声明:本文为博主原创文章。未经博主同意不得转载。 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. [bzoj1022][SHOI2008]小约翰的游戏John (反Nim游戏)

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...

  2. gitlab+jenkins+docker自动构建

    docker容器部署gitlab: sudo docker run --detach \ --hostname git.gitlab.com \ --net=host \ --publish 9443 ...

  3. JavaScript中上传文件为图片如何读取+JS中如何使用clip()剪切指定区域(UI组件之图片剪裁器)

    File读取和FileReader() //获取上传的文件/图片 function getFile(){ var files,len; var reader = new FileReader(); v ...

  4. BeautifulSoup实例

    Beautiful Soup 4.4.0 中文文档:http://beautifulsoup.readthedocs.io/zh_CN/latest/ #coding:utf-8from bs4 im ...

  5. [luoguP2447] [SDOI2010]外星千足虫(高斯消元 + bitset)

    传送门 用bitset优化,要不然n^3肯定超时 消元过程中有几点需要注意,找到最大元后break,保证题目中所说的K最小 如果有自由元说明解很多,直接返回 #include <bitset&g ...

  6. ascii 和 byte以及UTF-8的转码规则

    多年来闲麻烦,只记录笔记,不曾编写BLOG,本文为原创,如需转载请标明出处 废话不说,直奔主题 ascii     计算机只接受 “高”.“低”电压,所以使用二进制  1  和  0 分别代表高低电压 ...

  7. 【BZOJ4736】温暖会指引我们前行(LCT)

    题意:有一张图,每条边有一个不同的编号,长度和权值,维护以下操作: 1.加边 2.修改边长 3.询问两点之间在最小权值最大的前提下的唯一路径长度 n<=100000 m<=300000 思 ...

  8. msp430入门编程45

    msp430中C语言的人机交互--独占CPU菜单

  9. python学习之-- redis模块操作 LIST

    redis 模块操作之 List List 操作,在内存中按照一个name对应一个List来存储. lpush(name,values):在name对应的list中添加元素,每个新的元素都添加到列表的 ...

  10. Lca 之倍增算法

    引入: 比如说要找树上任意两个点的路上的最大值.如果是一般的做法 会 接近o(n)的搜,从一个点搜到另一个点,但是如果询问多了复杂度就很高了. 然后我们会预处理.预处理是o(n²)的,询问是o(1)的 ...