当前位置: 首页 > 图文教程 > 网络编程 > 正则表达式 > 看到一个JS正则的题

正则表达式
js 正则使用方法
IP 正则表达式验证
Java 正则表达式详解
webregexp 正则测试实现代码
正则基础之 环视 Lookaround
正则基础之 NFA引擎匹配原理
使用正则表达式替换表情符号核心代码
js replace正则相关的诡异问题
mysql正则表达式 LIKE 通配符
[原创]jb51用的ubb转换
dw(dreamweaver)正则表达式函数列表
asp 正则 过滤重复字符串的代码
ASP 正则函数替换分页后的参数
javascript RegExp 对象属性与方法和应用
PHP 正则的使用基础入门
PHP 正则表达式函数库(两套)
正则表达式高级技巧及实例详解 笨活儿
中文用户名的js检验正则
JS 正则 时间验证
判断时间的正则表达式

正则表达式 中的 看到一个JS正则的题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 66 ::
收藏到网摘: n/a

贴出来与大家共勉。
先看一段代码,
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
alert(objReg.test("a:"));//返回false
</script>
为什么第二个test会返回false?是不是觉得奇怪。
原因我解答如下:
test实际上与exec方法的执行方法是一致的,只是返回值不一样。test返回的是true or false(如果exec返回的不是null),exec返回的是pattern(匹配)。
而exec的执行过程为:带有g参数时,下次匹配时,自动会跳到lastIndex后的位置,也就是这里的第2个位置。而这个位置与pattern显然不匹配。因此返回false。
解决方法:
(1)
可以不使用g(全局参数)也就是这样-
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/i;
alert(objReg.test("a:"));//返回true
alert(objReg.test("a:"));//返回true
</script>
(2)
可以用lastIndex=0来还原-
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
objReg.lastIndex=0;
alert(objReg.test("a:"));//返回true