当前位置:  编程技术>其它

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

    来源: 互联网  发布时间:2014-10-15

    本文导语:  下面我们要谈谈带有"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)); 运行上述代码,...

下面我们要谈谈带有"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的更多解释请看这里

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

    
 
 

您可能感兴趣的文章:

  • java使用正则表达校验手机号码示例(手机号码正则)
  • 正则表达式问题,使用正则表达式找出指定字符串并替换?
  • Javascript里的两种使用正则的方法
  • 使用Rhino让java执行javascript的方法实例 iis7站长之家
  • 正则表达式中使用变量赋值
  • java使用正则表达为数字添加千位符的简单方法
  • Linux find命令的搜索路径可否使用正则表达式
  • js 正则使用方法
  • 关于在shell脚本中使用正则表达式的问题
  • php使用正则过滤js脚本代码实例
  • 请问linux下有哪些轻量级的正则表达式库,我在一个应用中使用
  • 使用正则表达式复制问题:cp
  • 使用正则表达式替换表情符号核心代码
  • 怎么样使用正则表达式表示回文?
  • DreamWeaver中使用正则技术搜索
  • 正则在FireFox和IE下使用test的不同
  • asp match正则函数使用Matchs实例
  • python 正则式使用心得
  • 在C/C++里面使用正则表达式通配搜索,结果非预期
  • mysqlhotcopy 正则使用小技巧
  • Unix中最简单的问题:输入一个表达式,显示其结果。使用SCO OpenServer
  • python基础教程之lambda表达式使用方法
  • 在使用JDK1.4的正则表达式功能时,发现如果被搜索的字符太多,例如一篇文章.就会报错
  • 特急!!!如何使用regexp来进行正则表达式的匹配?
  • java正则表达式使用示例
  • C#的正则表达式Regex类使用简明教程
  • JavaScript 使用正则表达式进行表单验证的示例代码
  • c#字符串使用正则表达式示例
  • sp_executesql 使用复杂的Unicode 表达式错误的解决方法
  • c#使用正则表达式匹配字符串验证URL示例
  • 使用正则表达式匹配tsql注释语句
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 菜鸟问题:********如何在Javascript中使用ADO**********
  • 如何使用javascript语言实现在打开PAGE的时候,自动弹出另外一个窗口PAGE2,
  • 使用JavaScript实现的Flash运行环境 Gordon
  • 如何使用javascript语言实现在打开PAGE的时候,自动弹出另外一个窗口PAGE2,
  • 请问如何在Javascript中使用JSP语句?
  • 请教JSP变量在JavaScript中使用的问题.
  • 散点分,顺便问一下哪位有JavaScript的使用帮助资料<主要是里面的各种对象及方法属性的使用>
  • 为何我使用javascript中location'****.jsp'跳到某一页面,jsp页面不重新编译执行
  • 如何使用javascript语言实现在打开PAGE的时候,自动弹出另外一个窗口PAGE2,
  • 如何使用javascript语言实现在打开PAGE的时候,自动弹出另外一个窗口PAGE2,
  • javascript如何在.js文件中使用jsp中的变量
  • 想嵌套使用javascript,和jsp
  • 请问在Mozilla中如何使用click()事件?(javascript,html)。快快帮我啊!
  • python使用PyV8执行javascript代码示例分享
  • 使用jQuery异步加载 JavaScript脚本解决方案
  • 关于javascript冒泡与默认事件的使用详解
  • 使用Rhino让java执行javascript的方法实例
  • JavaScript 正则表达式使用详细参数
  • 如何使用JavaScript和正则表达式进行数据验证
  • javascript中使用正则表达式实现删除字符串中的前后空格
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3