RegExp.exec和String.match深入理解
今天在重新阅读《JavaScript权威指南》的RegExp和String的时候,看到了2个比较容易混淆的函数:RegExp的exec和String的match
这2个函数都是从指定的字符串中提取符合条件的字串。他们大部分时候的返回结构是一致的,但是在全局检索时,返回的结果差别会很大
1、正则表达式为非全局检索时,2者是等价的
返回符合条件的第一个子串以及对应的分组(如果存在存在)构成的伪数组:第一个元素是匹配的字串,余下的为匹配的分组。
伪数组包含2个属性:
input 返回要检索的字符串
index 返回匹配的子串在字符串的位置,在非全局检索时始终为0
example
var testString = 'Hello World',
reg1 = /\b\w+\b/; var result1 = reg1.exec(testString); console.log(result1);//[hello]
console.log(reg1.lastIndex); //
console.log(result1.index); // var testString = 'Hello World',
reg1 = /\b(\w)+\b/; var result1 = reg1.exec(testString); console.log(result1);//[hello, o]
console.log(reg1.lastIndex); //
console.log(result1.index); //0
2、正则表达式为全局检索时,2者的处理机制和返回结构不同
exec处理机制
当正则表达式为全局检索时,exec会记录每次匹配开始、结束的位置。匹配结束位置存储在正则表达式的lastIndex中,匹配开始位置存储在结果的index中。当exec继续被调用时,正则表达式会从lastIndex进行新的匹配,并返回新的符合条件的子串及分组,并更新正则表达式的lastIndex。重复这样的操作,直到全部匹配完(exec返回null)。此时正则表达式的lastIndex为0。
match处理机制
match在要匹配的正则表达式为全局检索时,会直接返回字符串中符合条件的子串数组(不包含分组,即使存在分组)。
example
var testString = 'Hello World',
reg1 = \b(\w+)\b, result; while((result=reg1.exec(testString)) != null){
console.log(result);
console.log(result.index,'-',reg1.lastIndex);
}
//["Hello", "Hello", index: 0, input: "Hello World"]
//0 "-" 5
//["World", "World", index: 6, input: "Hello World"]
//6 "-" 11 result = testString.match(reg1);
console.log(result);
console.log(result instanceOf Array);
//["Hello", "World"] //result instanceof Array
: true
RegExp.exec和String.match深入理解的更多相关文章
- string.match(RegExp) 与 RegExp.exec(string) 深入详解
string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...
- JavaScript RegExp.exec() 方法
定义和用法: exec() 方法用于检索字符串中的正则表达式的匹配. 语法: RegExpObject.exec(string); RegExpObject:必须参数,正则表达式: string:必须 ...
- javascript中正则表达式中的 match,exec,test,replace 之我理解
这个正则 ($&) 的语法: https://msdn.microsoft.com/library/3k9c4a32(v=vs.94).aspx 在ECMAScript中对这几个的说明: ma ...
- RegExp.exec
来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec Summ ...
- LeetCode686——Repeated String Match
题目:Given two strings A and B, find the minimum number of times A has to be repeated such that B is a ...
- js 正则表达式的使用(标志 RegExp exec() test() compile() $1...$9)
一,标志 g (global,全局匹配标志) 执行正则表达式匹配或替换时,一般只要搜索到一个符合的文本就停止匹配或替换.使用该标志将搜索所有符合的文本直到文本末尾. i (ignoreCase,忽略大 ...
- LeetCode 942. 增减字符串匹配(DI String Match) 49
942. 增减字符串匹配 942. DI String Match 题目描述 每日一算法2019/6/21Day 49LeetCode942. DI String Match Java 实现 and ...
- LeetCode 686. 重复叠加字符串匹配(Repeated String Match)
686. 重复叠加字符串匹配 686. Repeated String Match 题目描述 给定两个字符串 A 和 B,寻找重复叠加字符串 A 的最小次数,使得字符串 B 成为叠加后的字符串 A 的 ...
- 【Leetcode_easy】942. DI String Match
problem 942. DI String Match 参考 1. Leetcode_easy_942. DI String Match; 完
随机推荐
- NetCat使用手册
简介: 在网络工具中有“瑞士军刀”美誉的NetCat(以下简称nc),在我们用了N年了至今仍是爱不释手.因为它短小精悍(这个用在它身上很适合,现在有人已经将其修改成大约10K左右,而且功能不减少) ...
- MongoDb Replica Set中使用的地址
Unable to connect to a member of the replica set matching the read preference Primary 今天尝试使用MongoDB ...
- 简单翻译和补充:1. GNU ARM Eclipse
原文链接: GNU ARM Eclipse GNU 介绍: GNU 计划,又称革奴计划,是由RichardStallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.Ric ...
- 第四章 管理程序流(In .net4.5) 之 事件和回调
1. 概述 本章讲解如何使用 委托.lambda表达式 和 匿名方法 来创建和使用事件. 2. 主要内容 2.1 理解委托 委托是一种用方法签名形式定义的类型.可以让它指向其他方法,可以通过它调用其他 ...
- 小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载四(场景切换)
作为一款真正有使用价值的应用,首先应该至少有两个页面,通过页面的切换来实现更多的交互.比如手机人人网,打开以后先是进入登录页面,登录后会有新鲜事,然后拉开左边的面板,能看到相册.悄悄话.应用之类的其他 ...
- 006-python基础-条件判断与循环
一.条件判断 场景一.用户登陆验证 # 提示输入用户名和密码 # 验证用户名和密码 # 如果错误,则输出用户名或密码错误 # 如果成功,则输出 欢迎,XXX! #!/usr/bin/env pytho ...
- rails devise使用
gem 'devise'rails g devise:install Userrails g devise Userrails g devise:views
- AppCan移动技术全景图:创新、协作、支撑
开发者是移动互联网宏伟蓝图的最终实现者.如果你有创意.有技术,你可以开发一款服务上亿人的应用.所以,我感觉幸运,没有任何一个时代,能像现在这么好,技术人能够服务这么广大的市场,能够撬动百亿级的市场. ...
- 6月24日AppCan移动开发者大会礼品清单遭泄露
6月24日,第一届AppCan移动开发者大会将在北京国际会议中心举办,大会以”平台之上,应用无限”为主题,全景展现移动应用发展趋势.AppCan 移动技术蓝图及80万开发者的技术实践成果. 大会现场礼 ...
- android开发系列之回调函数
想必对于回调函数大家肯定不陌生,因为这是我们开发里面常用的代码技巧.我也就不废话了,让我们直接来看代码吧! public class TestCallback { public interface I ...