浅谈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 相关文章推荐
JSON 数据格式介绍
Jan 13 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 Javascript
js星星评分效果
Jul 24 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
JS设置cookie、读取cookie、删除cookie
Apr 17 Javascript
SWFUpload多文件上传及文件个数限制的方法
May 31 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
用js编写留言板
Mar 17 Javascript
js实现双人五子棋小游戏
May 28 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
jQuery 操作XML入门
2008/12/25 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
js分页工具实例
2015/01/28 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python三元运算符实现方法
2013/12/17 Python
python3调用R的示例代码
2018/02/23 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
Ajax和javascript的区别
2013/07/20 面试题
杠杆的科学教学反思
2014/01/10 职场文书
面试后的感谢信范文
2014/02/01 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
设备收款委托书范本
2014/10/02 职场文书
学校党支部承诺书
2015/04/30 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python