2014-02-24 41 views
1

我正在關注Elequent Javacript's website page on regular expressions,並且感到有些沮喪。REGEX在JavaScript中替換函數交換字

頁顯示了這個例子交換姓和名,同時刪除逗號:

var names = "Picasso, Pablo\nGauguin, Paul\nVan Gogh, Vincent\n"; 
document.writeln(names.replace(/([\w ]+), ([\w ]+)/g, "$2 $1")); 

筆者簡要介紹了它做什麼,但花費很少的努力解釋爲什麼它的工作原理,以及哪些關鍵功能這個例子是。

誰能幫我參透(「$ 1和$ 2)和他們所引用,爲什麼

+0

閱讀「正則表達式捕獲組」 – elclanrs

+0

謝謝,我希望作者會說。 –

回答

2

$1$2所引用的第一個和第二個捕獲組匹配(()之間的模式)。

給定的命令將找到匹配的正則表達式/([\w ]+), ([\w ]+)/並將其應用在所有的行(g選項)。對於每個匹配,它將取代與$2 $1匹配的字符串,即捕獲的第二值後跟空間,然後將第一次捕獲值

有關更多信息和正則表達式的良好起點,您可以轉到regular-expressions.info這是一個非常完整的參考。

+0

你能告訴我爲什麼這個逗號不會在最終結果中結束嗎? –

+1

如果仔細觀察正則表達式,它由兩個捕獲組組成(它捕獲一個或多個字母數字字符序列 - '\ w' - 或空格),並在',' - 逗號後跟空格 - 序列,沒有被捕獲。在你最初的例子中,第一場比賽中,第一個被捕獲的組將是「畢加索」,第二個將是「巴勃羅」,因此當計算'$ 1 $ 2'時,該序列將不會被任何地方看到。 – Gorkk

+0

有意義,所以我認爲如果逗號需要在某個地方,它需要逃脫? –