日期:2014-05-18  浏览次数:21198 次

求助 !!實在搞 不懂 js 中exec和 math函數
JScript code


function match()
   {
      var re=new RegExp("(go\s*)+","g");
  
      var src="let's go go go!";
      var arr=src.match(re)
            alert(arr);
   }
它得結果是 go,go,go


function match()
   {
      var re=new RegExp("(go\s*)+","g");
  
      var src="let's go go go!";
      var arr=re.exec(src);
            alert(arr);
   }
它得結果是 go,go
math 和exec結果為什麼不一樣阿?
function match()
   {
      var re=new RegExp("(go\s*)+","g");
  
      var src="let's goo goo go!";
      var arr=src.math(re);
            alert(arr);
   }
這個 結果 為什麼是 go,go,go

function match()
   {
      //var re=new RegExp("(go\s*)+","g");
       var re=/(go\s*)+/g
      var src="let's go go go!";
      var arr=src.math(re);
            alert(arr);
   }
這個結果是 go go go 
這是為什麼?
function match()
   {
      //var re=new RegExp("(go\s*)+","g");
       var re=/(go\s*)+/g
      var src="let's go go go!";
      var arr=re.exec(re);
            alert(arr);
   }
這個個結果 是 go go go,go
這是為什麼?







------解决方案--------------------
查一下手册就明白了.

match 是 String 的方法.

exec 是 ReExp 对象的方法.

match 只返回匹配的第一项(找到的)

exec 返回匹配的部分及子匹配项...

所以 match 只返回了 go go go 即串中匹配的内容.

而 
exec 返回了一个 array

array[0] 同 match 一样结果.
而 array[1]... 则是 正则表达式中的子匹配项...
------解决方案--------------------
String的replace也是直执行第一次找到的
------解决方案--------------------
探讨
查一下手册就明白了.

match 是 String 的方法.

exec 是 ReExp 对象的方法.

match 只返回匹配的第一项(找到的)

exec 返回匹配的部分及子匹配项...

所以 match 只返回了 go go go 即串中匹配的内容.


exec 返回了一个 array

array[0] 同 match 一样结果.
而 array[1]... 则是 正则表达式中的子匹配项...

------解决方案--------------------
自己 可以 写着 试一试

 参考: 征服Ajax - Web20开发技术详解
------解决方案--------------------
当然是 这个结果了。

 

\s 代表 空格 , * 代表 0 个或多个 。

go\s* 代表 go 后面至少有一个空格

"let's goo goo go!"; 匹配的 就只有 go go go 了.

 3 个数组 。


------解决方案--------------------
go\s* 代表 go 后面至少有一个空格 
---------------------------------
是有0到多个 重复1到n次