exec和match中的g标识
来源:互联网 发布:七天网络阅卷查分登录 编辑:程序博客网 时间:2024/05/22 13:28
exec() 函数是RegExp对象的一个方法;match()是String对象的一个方法。
正则表达式中,如果没有g,exec和match方法都是返回字符串中第一个匹配的部分,如果有分组的话,分组也会返回;
如果有g,exec每执行一次都会将reg的lastIndex属性更新,下次载执行exec时,会从这个值开始搜索匹配的部分,如果有分组的话,分组也返回;
如果有g,match会将字符串中所有与正则表达式匹配的部分返回,忽视分组。
假设有一个字符串:
str='dwd bill.gates@microsoft.com someone@gmail.com';
匹配邮件的正则表达式:
let re = /([\w\.]+)\@(\w+)\.(\w+)/; // 匹配邮件的正则表达式,并进行了分组,@之前是一组,@到.之间分一组,.之后分一组
没有g:
// 第一次执行re.exec(str)console.log(re.exec(str));console.log(re.lastIndex); // 0// 第二次执行re.exec(str)console.log(re.exec(str));console.log(re.lastIndex); // 0console.log(str.match(re));console.log(str.match(re));/*exec()h和match()返回值一样,不论执行了多少次:[ 'bill.gates@microsoft.com', 'bill.gates', 'microsoft', 'com', index: 4, input: 'dwd bill.gates@microsoft.com someone@gmail.com' ]re.lastIndex的值两次都为0,可以认为在没有g时,没有继续向后序内容匹配的需求,所以lastIndex没有必要更改。*/
有g:
// 第一次执行re.exec(str)console.log(re.exec(str));console.log(re.lastIndex); // 28// 第二次执行re.exec(str)console.log(re.exec(str));console.log(re.lastIndex); // 46console.log(str.match(re));console.log(str.match(re));/*对于exec来说,有g意味着“我有继续向后序内容匹配的需求”,没调用一次exec就匹配一次,只是每次匹配的起点不同(由lastIndex决定);对于match来说,有g意味着“我需要得到所有与整条正则表达式(不管分组)匹配的部分”,[ 'bill.gates@microsoft.com', 'bill.gates', 'microsoft', 'com', index: 4, input: 'dwd bill.gates@microsoft.com someone@gmail.com' ]28 [ 'someone@gmail.com', 'someone', 'gmail', 'com', index: 29, input: 'dwd bill.gates@microsoft.com someone@gmail.com' ]46 [ 'bill.gates@microsoft.com', 'someone@gmail.com' ] [ 'bill.gates@microsoft.com', 'someone@gmail.com' ]*/
阅读全文
0 0
- exec和match中的g标识
- Javascript正则中的exec和match
- match和exec异同
- 领悟javascript中的exec()和match()方法
- 正则表达式中的exec和match方法的区别
- exec() 方法和match方法
- 正则--match和exec方法
- match和exec的对比
- 正则exec和match的区别(比较)
- javascript中exec和match的比较
- javascript正则表达式exec 和 match 区别
- 正则方法 exec 和match以及test
- javascript 正则表达式match和exec
- JavaScript exec(),match()和searh()方法
- 【正则表达式】exec 和 match 解析
- 彻底领悟javascript中的exec与match方法
- 彻底领悟javascript中的exec与match方法(非原创)
- 彻底领悟javascript中的exec与match方法
- SparkSQL(上)--SparkSQL简介
- MQTT协议
- mysql汇总
- android的炫酷动画框架
- 使用MySQL驱动进行数据库连接
- exec和match中的g标识
- mysql 支持 emoji
- android:progressDrawable的作用
- Maven和Gradle对比
- Iterator主要有三个方法:hasNext()、next()、remove()详解
- Lua调试器
- bzoj1455 罗马游戏(左偏树(可并堆)+ 并查集)
- SqlServer中in和exists的区别效率问题
- vw让overflow:auto页面滚动条出现时不跳动