浅谈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 相关文章推荐
Dojo之路:如何利用Dojo实现Drag and Drop效果
Apr 10 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
详解vuex状态管理模式
Nov 01 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
javaScript中indexOf用法技巧
Nov 26 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
vue实现图片上传功能
May 28 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 Javascript
详解Vue中的自定义指令
Dec 07 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实现在站点里面添加邮件发送的功能
2020/04/28 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python异常和文件处理机制详解
2016/07/19 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
资深生产主管自我评价
2013/09/22 职场文书
三好学生自我鉴定
2013/12/17 职场文书
运动会稿件100字
2014/09/24 职场文书
房屋过户委托书范本
2014/10/07 职场文书
会计电算化实训报告
2014/11/04 职场文书
给老婆的道歉信
2015/01/20 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
汽车车尾标语大全
2015/08/11 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android