2011-07-02 26 views
0

比方說,我有:JS正則表達式匹配一個單詞的選擇沒有backref

/(private|public|protected)\s+function\s+(\w+)\((.*)\)\s+{/gi 

要匹配函數聲明的開始。我不想使用(private|public|protected),因爲()用作反向引用,但我不能使用[],因爲它們不匹配完整的單詞。

基本上,我只想要功能名稱爲$1,參數爲$2

謝謝大家。

**編輯**

每答案,我用?:

如。 /(?:private|public|protected)\s+function\s+(\w+)\((.*)\)\s+{/

+0

@ T.J.Crowder:這似乎與函數名稱匹配。 '\((。*)\)'匹配參數。 –

+0

@Felix:Doh!謝謝。 –

回答

7

可以使用非捕獲組:

(?: ...) 

MDN documentation

(?:x)匹配'x'但不記得這場比賽。這些被稱爲非捕獲括號。匹配的子字符串不能從結果數組的元素[1], ..., [n]中調用。

+0

@ T.J.Crowder:我不確定我是否理解。如果省略括號,則例如'公共函數foo(){}'只會匹配'public'而不是字符串的其餘部分... –

+0

我相信你是對的,請忽略。我剛剛被告知使用'(?:...)'不必要地改變。 –

+0

像魅力一樣工作。我在之前的谷歌搜索中看到過'?:',但不知道它會否定一場比賽。謝謝! – Jacksonkr

相關問題