zoukankan      html  css  js  c++  java
  • JavaScript正则表达式(四)

    正则表达式方法

    一、test方法

    用于测试字符串参数中是否存在匹配正则表达式模式的字符串

    如果存在就返回true,否则返回false

    实例:

    1、使用test方法不设置g标志时

     2、使用test方法设置g全局

    值会变得不稳定,一会是true一会是flase。(实际上是lastIndex的原因,并不是每次匹配都是从头开始的)

    第一次lastIndex=0(从第0个之后开始,返回true)查找完后,会把lastIndex的值设置为匹配到的字符串的最后一个字符的索引位置+1,

    第二次如果存在就返回true,否则返回false查找时会从lastIndex这个位置开始,lastIndex=0+1(从第1个之后开始,返回true)

    第三次查找lastIndex=1+1(从第2后开始,返回false)

    所以想用test方法的原意是不用加g标志

     

     二、exec()方法

    目的:适应正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反应匹配结果

    如果没有匹配的文本则返回null,如果匹配到了就返回一个结果数组;

    数组内容:

    • index  声明匹配文本的第一个字符的位置(从第几个字符开始匹配的)
    • input  存放被检索的字符串string

    非全局调用

    调用非全局的RegExp对象的exec()时,如果匹配到返回数组

    第一个元素是与正则表达式相匹配的文本

    第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有)

    第三个元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <script>
     9     var reg1=/d(w)d/g;
    10     var reg2=/d(w)d/;
    11     var as="a1b2c3d4e5";
    12 
    13     var sd=reg1.exec(as);
    14     document.write(sd.index + sd.toString());
    15     console.log(reg1.lastIndex + '	' + sd.index + '	' + sd.toString());
    16     console.log(reg1.lastIndex + '	' + sd.index + '	' +sd.toString());
    17 
    18     </script>
    19 </body>
    20 </html>

     

    正则表达式对象方法

    一、search()方法

    目的:用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串

    方法返回第一个匹配结果index(匹配的第一个字符出现的位置),查找不到返回 -1

    search()方法不执行全局匹配,忽略标志 g,并且总是从字符串的开始进行检索

    实例:

    直接写数字依然可以

     

    二、match( )方法

    目的:match()方法将检索字符串,以找到一个或是多个与regexp匹配的文本

    与search()忽略g标志不同的是,match()方法regexp是否有具有g标志对结果影响很大

    非全局调用

    如果regexp没有标志g,那么match()方法就只能在字符串中执行一次匹配

    如果没有找到任何匹配的文本,将返回null

    如果找到匹配的文本将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

    返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本

    除了常规的数组元素之外,返回的数组还含有2的对象属性

    • index声明匹配文本的起始字符在字符串的位置
    • input声明对stringObject的引用
    var reg3=/d(w)d/g;
        var ts="a1b2c3d4e5";
        var ret=ts.match(reg3);
        console.log(ret);
        console.log(reg3.lastIndex + '	' + ret.index + '	' );

    全局调用

    如果regexp具有标志g则match()方法将执行全局检索,找到字符串中的所有匹配子字符串

    • 没有找到任何匹配的子串,则返回null
    • 如果找到一个或多个匹配子串,则返回一个数组

    数组元素中方存放的是字符串中所有的匹配子串,而且也没有indx属性或input属性(信息量也更少)

    var reg4=/d(w)d/;
        var ts="a1b2c3d4e5";
        var ret=ts.match(reg4);
        console.log(ret);
        console.log(reg4.lastIndex + '	' + ret.index + '	' )

     

     三、split()方法

    我们经常使用split 方法把字符串分割为字符数组

     在一些复杂的分割情况下可以使用正则表达式解决

    用数字作为分隔标志

     

    四、replace()方法

    语法结构:

    String.prototype.replace(str,replaceStr)

    String.prototype.replace(reg,replaceStr)

    String.prototype.replace(reg,function)

    第一个参数可以是字符串或正则表达式,第二个参数可以是需要替换的字符也可以是函数

    例:查找字符串中的数字,并替换成数字或字母

    String.prototype.replace(reg,function)

    function参数含义

    function会在每次匹配替换的时候调用(每次匹配的时候就调用一次),调用的时候会传入四个参数

    • 匹配字符串
    • 正则表达式分组内容,没有分组没有该参数
    • 匹配项在字符串中的index(每个匹配结果的位置)
    • 原字符串

    实例:

    1、

    'a1b2c3d4e5'.replace(/d/g, function(match,index,origin){
            console.log(index);
            return parseInt(match) + 1;
        });

    2、

    'a1b2c3d4e5'.replace(/(d)(w)(d)/g, function(match,group1,group2,group3,index,origin) {
            console.log(match);
            return group1 + group2;
        });

  • 相关阅读:
    先做人,再做事
    当ligerui的grid出现固定列与非固定列不在同一水平线上时,改怎么处理
    权限设计的idea
    ligerUI问题
    在程序出现问题,当找不到错误时,第一时间用try ,catch包括起来
    当页面是本地页面时,通过ajax访问tomcat里的action,传递的参数在action里并不能识别
    好句子
    js Uncaught TypeError: undefined is not a function
    Photoshop学习笔记(一)
    microsoft project 出现不能保存为xls文件时可以按照如下方法解决
  • 原文地址:https://www.cnblogs.com/nyw1983/p/11558514.html
Copyright © 2011-2022 走看看