浅谈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 相关文章推荐
JavaScript 浮点数运算 精度问题
Oct 06 Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
JavaScript动态创建div属性和样式示例代码
Oct 09 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
connection reset by peer问题总结及解决方案
Oct 21 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
JS数组方法concat()用法实例分析
Jan 18 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
Mar 14 Javascript
jquery实现抽奖功能
Oct 22 jQuery
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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
Augularjs-起步详解
2016/07/08 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
socket + select 完成伪并发操作的实例
2017/08/15 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python编写计算器功能
2019/10/25 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
社区工作者感言
2014/03/02 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
婚前协议书范本两则
2014/10/16 职场文书
画展邀请函
2015/01/31 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书