text / exec方法

text()

var reg1 = /\w/;

var reg2 = /\w/g;

reg1.test('a')      ===   true        reg2.test('a')      ===   true

reg1.test('a')      ===   true        reg2.test('a')      ===   false

reg1.test('a')      ===   true        reg2.test('a')      ===   true

lastIndex在作怪

while(reg1.test('ab')){

    console.log(reg1.lastIndex)     // 0 0 0 0...

}

while(reg2.test('ab')){

    console.log(reg2.lastIndex)     // 1 2

}

解决办法:

  1. (/\w/g).test('a') 每次都实例化一个新的规则,但是会增加内存开销,不建议
  2. reg2使用reg1模式,不需要加'g'全文搜索

exec()

非全局调用

  1. 调用非全局的RegExp对象的exec()时,返回数组
  2. 第一个元素是与正则表达式相匹配的文本

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

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

  5. 。。。以此类推

var reg3 = /\d(\w)\d/;          //非全局

var reg4 = /\d(\w)\d/g;

var ts = '1a2b3c4d5e';

var ret = reg3.exec(ts);        // 匹配到的结果数组 ['1a2','a']

console.log(reg3.lastIndex + '\t' + ret.index + '\t' + ret.toString());
// "0 0 12a,a"
//非全局下lastIndex不生效,第二个0代表'第一个匹配结果是从下标为0的位置开始',匹配的结果数组转化为字符串 console.log(reg3.lastIndex + '\t' + ret.index + '\t' + ret.toString()); // "0 0 12a,a" while(ret = reg4.exec(ts)){
console.log(reg4.lastIndex + '\t' + ret.index + '\t' + ret.toString());
//"3 0 1a2,a" "7 4 3c4,c"
}

整理自慕课网教学 点此进入

初学JavaScript正则表达式(十二)的更多相关文章

  1. 初学JavaScript正则表达式(十)

    前瞻与后顾 断言 === assert 符合断言为正向,不符合为负向 例 'a2*3'.replace(/\w(?=\d)/g,'x') ------- x2*3 看看'\d'前面是不是'\w',如果 ...

  2. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  3. 初学JavaScript正则表达式(二)

    正则表达式的实例化与标识符 字面量: var reg = /\bis\b/g // \b--字符边界 g全文搜索 查找单词为is的字符 He is a boy. IS He? 构造函数: var re ...

  4. JavaScript正则表达式(二)

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  5. 前端笔记之JavaScript(十二)缓冲公式&检测设备&Data日期

    一.JavaScript缓冲公式ease 原生JS没有自己的缓冲公式,但是你要自己推理的话,必须要懂一些数学和物理公式: 让div用100毫秒(帧),从left100px的位置变化到left800px ...

  6. 初学JavaScript正则表达式(八)

    JavaScript正则贪婪模式与非贪婪模式 贪婪模式: 例: \d{3,6} 匹配数字3到6次(正则表达式默认为贪婪模式,即匹配最多次,失败即停) '12345678'.replace(/\d{3, ...

  7. javascript (十二)对象二

    JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性和方法 属性是与对象相关的值. 方法是能够在对象上执行的动 ...

  8. 深入浅出javascript(十二)继承——构造函数继承和组合继承

    #题记: 有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号).现有两个子类,分别为苹果,桔子,希望继承水果父类. 一.构造函数继承 构造函数继承相当把父类的属性在子类 ...

  9. JavaScript(十二)事件

    Dom事件 1.DOM0级事件 on事件 只能 监听冒泡阶段 切只能绑定一个事件 dom.onclick = function(){}; 2.Dom2级事件 可以绑定多次事件    可以通过设置fla ...

随机推荐

  1. 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍

    关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...

  2. NXP_RTCESL库

    恩智浦实时控制嵌入式软件库(缩写为RTCESL,以前为恩智浦嵌入式软件库FSLESL)是一组算法,从基础数学运算到高级数学变换以及高级观测器,这些都可以方便地用在复杂的实时控制应用中以及我们的电机控制 ...

  3. 数据库TINYINT类型 参数0 mybatis取不到值

    tinyint存储0的奇怪问题  数据库TINYINT类型   参数0  mybatis取不到值 postman 传参 audited   =0          audited   =1  两种情况 ...

  4. 201871010116-祁英红《面向对象程序设计(java)》第八周学习总结

    项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.c ...

  5. 2019 SDN上机第6次作业

    2019 SDN上机第6次作业 1.实验拓扑 (1)实验拓扑 (2)使用Python脚本完成拓扑搭建 from mininet.topo import Topo from mininet.net im ...

  6. WPF Datagrid 控制 第一行和第一列之间的空白

    原文:WPF Datagrid 控制 第一行和第一列之间的空白 这个位置就是 这里 我们更改 DataGridControltemplate 模板 看树形结构 里面是一个BUtton 功能是全选 能找 ...

  7. sql server 2008清除日志

    先改成简单模式,再清除日志,再改回原来模式 USE [oms20190322]GOALTER DATABASE oms20190322 SET RECOVERY SIMPLE WITH NO_WAIT ...

  8. Python爬虫大作业

    一.题目: 获取并保存目标网站的下图所示的所有英文名,网页转换通过点击more names刷新名字并将各个英文名子目录下,去获取并保存每一个英文名的名字.性别.寓意.简介如下图所示内容红色标记框内的内 ...

  9. Nacos集群搭建过程详解

    Nacos的单节点,也就是我们最开始使用的standalone模式,配置的数据是默认存储到内嵌的数据库derby中. 如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集群搭建的 ...

  10. 如何使用PHP的生成器yield处理大量数据业务

    官方解释yield yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大 ...