文档章节

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

静默行
 静默行
发布于 06/07 11:17
字数 1310
阅读 4
收藏 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中的正则表达式

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

闵开慧
2013/04/08
0
0
JavaScript学习记录day9-标准对象

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

ygqygq2
06/11
0
0
正则&highlight高亮实现(干货)

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

牧云云
2017/01/12
0
0
JavaWeb01-HTML篇笔记(七)

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

我是小谷粒
04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部