javascript正则:正确使用带有" g" 标记的javascript正则表达式来源: 发布时间:星期一, 2009年9月7日 浏览:4次 评论:0
下面我们要谈谈带有"g" 标记正则表达式使用问题首先让我们看段代码从例子入手更容易理解
复制代码 代码如下: 1 function a(val) 2 { 3 var re = /^\d+$/g; 4 alert(re.lastIndex); 5 re.test(val); 6 } 7 alert(a(5)); 8 alert(a(6)); 运行上述代码在区别浏览器中会得到区别结果IE中:0 true 0 true,FF和Chrome中:0 true 1 false,看到这里想必会有人头雾水感到诧异针对这个问题就我目前查阅资料找到了两种思路方法 1、使用match 复制代码 代码如下: 1 function a(val) 2 3 { 4 5 var re = /^\d+$/g; 6 7 ((""+val).match(re)) 8 9 true; 10 11 12 13 false; 14 15 } 16 17 alert(a(5)); 18 19 alert(a(6)); 注:要使用""+val把val转化为串有关match具体使用思路方法可参考这里 2、使用不带"g" 正则表达式(var re=/^\d+$/或var re= RegExp("^[0-9]+$")) 复制代码 代码如下: 1 function a(val) 2 3 { 4 5 var re = RegExp("^[0-9]+$");//或者var re=/^\d+$/; 6 7 re.test(val); 8 9 } 10 11 alert(a(5)); 12 13 alert(a(6)); 14 15 注:var re = RegExp("^[0-9]+$")中只能用[0-9]不能用\d,至于为什么我不很明白希望哪位知道给讲讲 不难看出上面两种思路方法是从侧面考虑如何解决问题 没有从正面解决接下来我们从问题出现本质上分析下并给出解决思路方法 要从问题出现本质考虑我们就不得不从"g" 标记说起带有"g"标记正则表达式有个属性lastIndex,该属性存放个整数它声明是上次匹配文本的后第个位置上次匹配结果是由思路方法 RegExp.exec 和 RegExp.test 找到它们都以 lastIndex 属性所指位置作为下次检索起始点这样就可以通过反复这两个思路方法来遍历个串中所有匹配文本该属性是可读可写只要目标串下次搜索开始就可以对它进行设置当思路方法 exec 或 test 再也找不到可以匹配文本时它们会自动把 lastIndex 属性重置为 0看到这里我们不难看出问题出现原因和解决思路方法了只要我们在下次搜索的前把lastIndex属性重置为0即可如下: 复制代码 代码如下: 1 function a(val) 2 3 { 4 5 var re = /^\d+$/g; 6 7 re.lastIndex=0;//重置lastIndex为0 8 9 re.test(val); 10 11 } 12 13 alert(a(5)); 14 15 alert(a(6)); 有关lastIndex更多解释请看这里 至此我们已经明白问题出现本质以及如何较好解决这样问题希望本文对些人有帮助 0
相关文章读者评论发表评论 |