2011-09-18 24 views
0

我有以下代碼:如何在傳遞函數進行替換時獲得匹配組?

this.parse = function(whatToParse, currentItem) { 
    var re = /\{j\s([a-z0-9\.\|_]+)\ss\}/gi; 
    var newResult = whatToParse.replace(re, function(matches){ 
     alert(matches); 
    }); 
} 

whatToParse是:

  <h1> 
       {j name s} 
      </h1> 
      <div> 
       <nobr>{j description s}</nobr> 
      </div> 

但爲什麼比賽是不是數組?它只包含匹配的字符串,不包含組。 例如:alert(matches);警報「{j name s}」和alert(matches[1]);警報「j」。

爲什麼?如何獲得第一組?

P.S.我不明白,因爲在PHP中,這個RegExp正常工作。

+0

它工作正常。你會看到2個警報,因爲有2個匹配。而有趣的是 - 在這兩種情況下'匹配'[1]'是'j'。 – c69

+0

你知道什麼是正則表達式組嗎? – Mirgorod

回答

1

請參閱documentation [MDN]。捕獲的值作爲參數傳遞給函數。

該函數的自變量如下:

Possible name Supplied value 
str    The matched substring. (Corresponds to $& above.) 
p1, p2, ...  The nth parenthesized submatch string, provided the first argument to replace was a RegExp object. (Correspond to $1, $2, etc. above.) 
offset   The offset of the matched substring within the total string being examined. (For example, if the total string was "abcd", and the matched substring was "bc", then this argument will be 1.) 
s    The total string being examined. 

(抱歉的格式,但在降價創建表是不容易的),你的情況

所以:

var newResult = whatToParse.replace(re, function(match, firstGroup){ 
    alert(firstGroup); 
}); 
相關問題