正确使用带有"g"标记的javascript正则表达式

脑残片专卖120

脑残片专卖120

2016-02-19 10:12

今天图老师小编要向大家分享个正确使用带有"g"标记的javascript正则表达式教程,过程简单易学,相信聪明的你一定能轻松get!
下面我们要谈谈带有"g" 标记的正则表达式的使用问题,首先让我们看一段代码,从例子入手更容易理解。
代码如下:

1 function a(val)
2 {
3 var re = /^d+$/g;
4 alert(re.lastIndex);
5 return 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 if((""+val).match(re))
8
9 return true;
10
11 else
12
13 return false;
14
15 }
16
17 alert(a(5));
18
19 alert(a(6));

注:要使用""+val把val转化为字符串,关于match的具体使用方法可参考这里

2、使用不带"g" 的正则表达式(var re=/^d+$/或var re=new RegExp("^[0-9]+$"))


代码如下:

1 function a(val)
2
3 {
4
5 var re = new RegExp("^[0-9]+$");//或者var re=/^d+$/;
6
7 return re.test(val);
8
9 }
10
11 alert(a(5));
12
13 alert(a(6));
14
15


注:var re = new 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 return re.test(val);
10
11 }
12
13 alert(a(5));
14
15 alert(a(6));


关于lastIndex的更多解释请看这里

至此我们已经明白问题出现的本质,以及如何较好的解决这样的问题,希望本文对一些人有帮助。
展开更多 50%)
分享

猜你喜欢

正确使用带有"g"标记的javascript正则表达式

Web开发
正确使用带有"g"标记的javascript正则表达式

JavaScript 正则表达式解析

Web开发
JavaScript 正则表达式解析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在Javascript中使用正则表达式

Web开发
在Javascript中使用正则表达式

javascript正则表达式分析

Web开发
javascript正则表达式分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JavaScript 正则表达式使用详细参数

Web开发
JavaScript 正则表达式使用详细参数

Javascript正则表达式详解

Web开发
Javascript正则表达式详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

pjblog2的参数

pjblog2的参数

win10 360浏览器无法上网解决办法

win10 360浏览器无法上网解决办法
下拉加载更多内容 ↓