浅谈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自定义事件介绍
Aug 29 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
JavaScript File分段上传
Mar 10 Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
jQuery文字轮播特效
Feb 12 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
layui table 多行删除(id获取)的方法
Sep 12 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
php实现删除空目录的方法
2015/03/16 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Python实现线程池代码分享
2015/06/21 Python
Python 的内置字符串方法小结
2016/03/15 Python
python图像常规操作
2017/11/11 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python模块相关知识点小结
2020/03/09 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
python爬虫如何解决图片验证码
2021/02/14 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
测试时代收集的软件测试面试题
2013/09/25 面试题
Why do we need Unit test
2013/01/03 面试题
学生会竞选自荐信
2013/10/12 职场文书
生产部管理制度
2014/01/31 职场文书
骨干教师考核方案
2014/05/09 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL