(……续例11)

例12:全局RegExp属性

  1. void function reg_12()  
  2. {  
  3.     var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())  
  4.     if (ver >= 5.5)  
  5.     {  
  6.         var s = "Live for nothing,die for something";  
  7.         var r = /\w+/g;  
  8.         while ((r.exec(s)) != null)  
  9.             alert(RegExp.index + "-" + RegExp.lastIndex + ": " + RegExp.lastMatch);  
  10.     }  
  11.     else 
  12.     {  
  13.         alert("只有JScript 5.5及以上版本支持该功能。");  
  14.     }  

行3:检测浏览器的JavaScript脚本引擎,分别获取主版本号和副版本号,然后用.字符连接起来并通过Number()方法转换为数字,从而判断其是否为5.5及以上的版本(低于5.5的版本不支持全局RegExp对象)。
行7:\w符号匹配包括下划线的任何单词字符,等价于'[A-Za-z0-9_]'。由于使用了开关g,因此将匹配每一个,注意,这里并没有使用^符号要求从字符串开始进行匹配。
行8:该循环只要正则表达式匹配到内容就循环,因为有开关g,所以每次都会向后移动一个单词。
行9:通过访问全局对象RegExp的三个属性,显示各个单词的位置及内容。
其中,index属性返回字符位置,它是查找字符串中第一个成功匹配的开始位置;lastIndex属性返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。这两个属性都是基于下标0开始的;显然lastIndex属性会比单词的结束字符所在索引大1。lastMatch属性返回正则表达式搜索过程中的最后匹配的内容。
运行结果:while循环会执行6次,例如第1次显示0-4:Live

(未完待续……)