js正则表达式lastIndex
2016-01-27 00:53
483 查看
今天在写一个校验ip的正则表达式时,遇到一个问题,表达式匹配本身没有任何问题,但当末尾带上/g时,校验同一个ip,第一次使用test返回的结果是true,但第二次就是false,第三次又是true,仔细一想,记得RegExp对象有一个记录匹配位置的属性,于是上w3school查了一下,果然。
以下为w3school上的内容:
该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。
该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。
重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。
因此,如果正则带有标志g,则必须将lastIndex重置为0后才能再用做校验,否则使用test校验不同的字符串时,RegExp会使用test前一个字符串得出的lastIndex去test后一个字符串,这样代码就坑爹了,必定出错。
思前想后,一般情况下,正则作校验字符串用时,不需要带g
RegExpObject.lastIndex
以下为w3school上的内容:
该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。
该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。
重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。
因此,如果正则带有标志g,则必须将lastIndex重置为0后才能再用做校验,否则使用test校验不同的字符串时,RegExp会使用test前一个字符串得出的lastIndex去test后一个字符串,这样代码就坑爹了,必定出错。
思前想后,一般情况下,正则作校验字符串用时,不需要带g
相关文章推荐
- js正则表达式语法
- 重读js高程笔记二
- JavaScript+html5 canvas绘制的小人效果
- js实现简单排列组合的方法
- 基于JavaScript实现瀑布流效果(循环渐近)
- JavaScript下的时间格式处理函数Date.prototype.format
- js实现的彩色方块飞舞奇幻效果
- javascript中的3种继承实现方法
- js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
- 理解javascript异步编程
- 简单介绍jsonp 使用小结
- 再谈JavaScript异步编程
- 用window.onerror捕获并上报Js错误的方法
- 封装属于自己的JS组件
- 不用一句js代码初始化组件
- APP中javascript+css3实现下拉刷新效果
- js正则表达式
- EL表达式
- JavaScript多继承的实现
- 使用 ajax json(getJSON)从服务器读取数据,在IE下不更新问题解决