2012-10-24 94 views
2

讀這discussion,我不明白這是什麼意思:任何人都可以解釋JavaScript代碼片段?

$1X$2 

只需X

而這個其他代碼:

str = str.replace(/(<script.*?>)(.*)(?=<\/script>)/gi, function(x,y,z) 
{return y+z.replace(/a/gi,'Z')}) 

這是我不解地問:

  • ?=
  • 怎麼做function(x,y,z)作品?即從哪裏取得x,yz

如果有人能夠以清晰的方式解釋此代碼,我將不勝感激。

+0

這裏有一些很好的答案。只是認爲我會投入一個額外的資源爲JavaScript正則表達式https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions – Jrod

回答

5

$ 1和$ 2引用捕獲的子表達式(由圓括號()分隔)來自.replace()先前參數中的正則表達式。

?=是積極的向前看。http://www.regular-expressions.info/lookaround.html

function(x, y, z)是一個匿名函數表達式,它引用$ 1和$ 2做類似的事情,但它將它們存儲在變量中。

+0

神聖同步的答案,蝙蝠俠! – jrajav

5
  1. 用作第二參數傳遞給.replace()呼叫的字符串「$ 1X $ 2」包括從正則表達式第一個參數引用。 —組中的正則表達式的部分在括號—中收集它們匹配以供稍後使用的字符。子串「$ 1」和「$ 2」是指「任何組1匹配」(或組2)。

  2. 當調用.replace()的第二個參數是一個函數時,JavaScript將匹配信息作爲參數傳遞給該函數。第一個參數始終是整個比賽。隨後的參數是匹配的組。

因此:

alert("hello world".replace(/(ell)(o w)/, "$2$1"); 
// alerts "ho wellorld" 
5

這是所有關於捕獲組。 ()捕捉所有的內容,以便以後訪問您的匹配的子串。

$1指的是第一個捕獲組,$2到第二個(分別是第一和第二對括號)。 ($0將參照整場比賽。)

與回調函數的變體不相同,但這裏的變量xyz都充滿了捕獲組(分別對應於$0$1$2)。

最後?=開啓了一個預見。這表明在匹配中這個位置後面跟着<\/script>,而沒有在匹配的字符串中實際推進正則表達式引擎,也沒有在匹配中包括這個部分。

相關問題