浅谈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 相关文章推荐
jquery插件开发方法(初学者)
Feb 03 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
浅析js中substring和substr的方法
Nov 09 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
3种vue组件的书写形式
Nov 29 Javascript
Node.js创建Web、TCP服务器
Dec 05 Javascript
layui select动态添加option的实例
Mar 07 Javascript
支付宝小程序实现省市区三级联动
Jun 21 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
js控制input输入字符解析
2013/12/27 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
python框架django基础指南
2016/09/08 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python中Selenium库使用教程详解
2020/07/23 Python
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
2014年端午节活动方案
2014/03/11 职场文书
中文专业求职信
2014/06/20 职场文书
捐款活动总结
2014/08/27 职场文书
收银员岗位职责范本
2015/04/07 职场文书
美丽心灵观后感
2015/06/01 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
用php如何解决大文件分片上传问题
2021/07/07 PHP
聊聊Python String型列表求最值的问题
2022/01/18 Python
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS