文档章节

JS与正则表达式相关的方法总结

静默行
 静默行
发布于 06/07 11:17
字数 1310
阅读 5
收藏 0

regexp实例方法

exec()

  1. exec()是专门为捕获组设计的方法,exec接受一个参数,即需要应用正则的字符串,返回一个数组,或者没有匹配的时候返回null。注:/^/.exec(‘str’)返回一个数组,第一项为”。因为在’str’中在字符串开始的地方存在^,不算没有匹配。
  2. exec()返回的数组格式:[‘总匹配字符串’,捕获1,捕获2…,index,input],其中如果没有捕获组,数组中就没有捕获项,如果有捕获组,但是没有捕获到字符,则数组中对应的捕获项为undefined。这是一个Array的实例,但是有两个额外的属性:index 表示匹配项在字符串中的位置,而 input 表示应用正则表达式的字符串。

    注:可以给array添加属性,输出的格式如下:
    var a = new Array(1,2);
    a.input = 'a';
    console.log(a); //[ 1, 2, input: 'a' ]
    
  3. 对于 exec()方法而言,即使在模式中设置了全局标志g,它每次也只会返回一个匹配项。在不设置全局标志的情况下,在同一个字符串上多次调用 exec()将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项,并且该正则表达式的lastindex属性会改变

    eg:
    var a = /w/g;
    
    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(a.exec(b));
    
    }
    //0
    //[ 'w', index: 2, input: 'aawasdadwaaw' ]
    //3
    //[ 'w', index: 8, input: 'aawasdadwaaw' ]
    //9
    //[ 'w', index: 11, input: 'aawasdadwaaw' ]
    

test()

  1. test()接受一个字符串参数。在模式与该参数匹配的情况下返回 
    true;否则,返回 false。在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的 
    情况下,使用这个方法非常方便。因此,test()方法经常被用在 if 语句中,用法:

    var text = "000-00-0000";
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if (pattern.test(text)){
        alert("The pattern was matched.");
    } 
    

字符串的模式匹配方法

match()

  1. match函数在非全局情况与exec函数返回结果完全一致,只是match函数是String的实例方法,调用方法为’str’.match(regexp);
  2. match函数在全局模式下与exec函数返回结果不同,match会返回所有匹配项组成的一个数组,没有input和index属性,并且仅仅返回整个的匹配项,即忽略正则表达式中的捕获组。 
    eg: 
    var a = /(w)a/g;

    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(b.match(a));
    
    }
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]
    

search()

  1. search接受一个正则表达式参数,返回字符串中第一个匹配项的索引,如果没有找到匹配项,返回-1,无论正则表达式是否设置了g标志,都会返回第一个匹配项的索引。

replace()

  1. replace是字符串替换方法,接受两个参数,匹配的正则表达式(或者一个字符串)和替换用的字符串。
  2. 如果第二个参数是字符串,可以在字符串中插入特殊的字符序列

    $$ $
    $& 匹配整个模式的子字符串(不是输入的字符串)。与RegExp.lastMatch的值相同
    $' 匹配的子字符串右边的内容。与RegExp.rightContext的值相同
    $` 匹配的子字符串左边的内容。与RegExp.leftContext的值相同
    $n 匹配第n个捕获组的子字符串,其中n等于0~9。例如,$1是匹配第一个捕获组的子字符串,$2是匹配第
    二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
    $nn 匹配第nn个捕获组的子字符串,其中nn等于01~99。例如,$01是匹配第一个捕获组的子字符串,$02
    是匹配第二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
    

    注:javascript高级程序设计第三版将$’与$`的用法写反了。

  3. 如果第二个参数是函数,在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递 3 个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串。在正则表达式中定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。这个函数应该返回一个字符串,表示应该被替换的匹配项。

    在全局模式下,会一次次调用这个函数,直到这个字符串处理完成。
    

split()

  1. split方法也可以指定正则表达式,并且还可以设置第二个参数来指定返回的项数。 
    高程上的例子:

    var colorText = "red,blue,green,yellow";
    var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
    var colors2 = colorText.split(",", 2); //["red", "blue"]
    var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""] 

© 著作权归作者所有

共有 人打赏支持
静默行
粉丝 1
博文 34
码字总数 16625
作品 0
武汉
程序员
私信 提问
简单说 正则表达式——要注意lastIndex属性

说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ignoreCase、multiline、lastIndex。 source:是一个只读的字符串,包含...

FEWY
2017/07/10
0
0
JavaScript学习记录day9-标准对象

JavaScript学习记录day9-标准对象 [TOC] 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用操作符获取对象的类型,它总是返回一个字符...

ygqygq2
06/11
0
0
精通 JavaScript中的正则表达式

相关文章: JS正则表达式详解[收藏] Javascript正则表达式笔记 javascript基础知识大集锦(2) JavaScript精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式。例如,可...

闵开慧
2013/04/08
0
0
JavaWeb01-HTML篇笔记(七)

.1 案例三:完成对注册页面的数据的简单校验.1.1.1 需求: 对注册页面的数据进行非空的简单校验!!!如果有某个值没有输入,点击提交,弹出一个对话框进行提示!! 1.1.2 分析:1.1.2.1 技术分...

我是小谷粒
04/28
0
0
正则&highlight高亮实现(干货)

写完正则表达式以后在浏览器上检测实在是不方便,于是就写了一个JS正则小工具,大大地提高了学习效率。学习之余用正则实现了一个highlight高亮demo,欢迎交流。 什么是正则表达式? 简单的说:...

牧云云
2017/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
41分钟前
2
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
3
0
3分钟总结Mybatis别名

1.系统内置别名: 把类型全小写(resultType/paramType) 2.给某个类起别名 2.1 alias=”自定义” <typeAliases> <typeAlias type="com.bjsxt.pojo.People" alias="peo"/> </typeAli......

KingFightingAn
昨天
2
0
JAVA设计模式之模板方法模式和建造者模式

一、前期回顾 上一篇《Java 设计模式之工厂方法模式与抽象工厂模式》介绍了三种工厂模式,分别是工厂方法模式,简单工厂方法模式,抽象工厂模式,文中详细根据实际场景介绍了三种模式的定义,...

木木匠
昨天
8
0
C中的宏的使用(宏嵌套/宏展开/可变参数宏)

基本原则: 在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC))pr...

SamXIAO
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部