浅谈regExp的test方法取得的值变化的原因及处理方法


Posted in Javascript onMarch 01, 2017

1、JavaScript 正则表达式对象RegExp的test方法,用于检测一个字符串是否匹配某个模式。

字面量定义RegExp对象:var re = /pattern/attributes,其中attributes可以是g,i,m;

阅读以下程序:

<script type="text/javascript"> 
var str = 'abc123'; 
var re = /^abc/g ;
var result1 = re.test(str); 
var result2 = re.test(str); 
var result3 = re.test(str); 
document.write('result1:' + result1 + '<br/>'); 
document.write('result2:' + result2 + '<br/>'); 
document.write('result3:' + result3); 
</script>

我们会认为打印结果应该是true;true;true;

而实际情况却是true;false;true;

2、为什么第二个结果是false?

发现RegExp对象有一个lastIndex的属性,如果使用了全局修饰符,那么执行test方法后,lastIndex就会记录匹配的字符串在原始字 符串中最后一位的索引加一,例如执行了var result1 = re.test(str)后lastIndex为3(document.write('re.lastindex:' + re.lastIndex+ '<br/>');),如果没有发现匹配lastIndex置为0。当下次再执行时,对给定的字符串匹配不是从开头位置,而是要依据lastIndex提供的位置,由于这个原因,所以导致上例中result2的值为false。

3、处理方法:去除g;

即:var re = /^abc/g ;变为 var re = /^abc/;

以上这篇浅谈regExp的test方法取得的值变化的原因及处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
ajax 同步请求和异步请求的差异分析
Jul 04 Javascript
js计算精度问题小结
Apr 22 Javascript
javascript匿名函数实例分析
Nov 18 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
使用React代码动态生成栅格布局的方法
May 24 Javascript
Angular之指令Directive用法详解
Mar 01 #Javascript
js for循环倒序输出数组元素的实例
Mar 01 #Javascript
JSON与JS对象的区别与对比
Mar 01 #Javascript
JavaScript下拉菜单功能实例代码
Mar 01 #Javascript
Angular2 路由问题修复详解
Mar 01 #Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 #Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 #Javascript
You might like
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
python实现发送邮件功能代码
2017/12/14 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Django中的cookie和session
2019/08/27 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python中字符串的编码与解码详析
2020/12/03 Python
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
就业协议书样本
2014/08/20 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
好好学习保证书
2015/02/26 职场文书
个人原因辞职信模板
2015/05/13 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
Python OpenCV超详细讲解基本功能
2022/04/02 Python