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. 爬取编程常用词汇,保存为Excel

    编程常用词汇 import requests import openpyxl from lxml import etree import re url = 'https://www.runoob.co ...

  2. Ubuntu下doxygen+graphviz使用概录

    关键词:doxygen.Doxyfile.doxywizard.dot.graphviz等等. 使用doxygen从源码注释生成帮助文档或者SDK,输出格式有多种比如htmp.Latex等等. 如果想 ...

  3. June 09th, 2019. Week 24th, Sunday

    The beauty you see in me is a reflection of you. 你在我身上看到的美,正是你的倒影. From Jalaluddin Rumi. What we see ...

  4. BZOJ1369/LG4395 「BOI2003」Gem 树形DP

    问题描述 LG4395 BZOJ1369 题解 发现对于结点 \(x\) ,其父亲,自己,和所有的孩子权值不同,共 \(3\) 类,从贪心的角度考虑,肯定是填 \(1,2,3\) 这三种. 于是套路树 ...

  5. 3. 语法"陷阱"

    1. C运算符优先级 运算符(优先级从高到低) 结合律 ++(后置).--(后置).()(函数调用).[].{}.(复合字面量).. .-> 从左往右 ++(前置).--(前置).-.+.~.! ...

  6. postgresql 笔记

    客户端GUI 在官网下载一个,在安装的时候,不安装 server 端,会在客户端 安装一个 pgadmin .

  7. golang--redis连接池

    通过golang对redis操作,还可以通过redis连接池,流程如下: (1)事先初始化一定数量的连接,投入到连接池: (2)当go需要操作redis时,直接从连接池取出连接即可: (3)这样可以节 ...

  8. SynchronusQueue

    /** * 当向SynchronousQueue插入元素时,必须同时有个线程往外取 * SynchronousQueue是没有容量的,这是与其他的阻塞队列不同的地方 */ public class S ...

  9. nginx: [emerg] unknown directive “ ” in /usr/local/nginx/nginx.conf.conf:xx报错处理

    当我们在修改Nginx的配置文件,然后加载配置文件./nginx -s reload   报错类似的错误, nginx: [emerg] unknown directive “ ” in /usr/l ...

  10. PDF目录编辑器使用介绍

    PDF目录编辑器使用介绍 魏刘宏 2019.06.28 PDF 是一个比较优秀的文档格式,能够保证在任何终端显示的样式是一样的.但同时也带来了一个问题,就是编辑不方便,其实这也是这个格式特意为之的,无 ...