2014-10-10 51 views
0

我有正則表達式,我試圖匹配特定的函數參數。我希望能夠在語言包中以某種方式設計它們。正則表達式匹配多個元素

這裏是我想匹配的文本:

addFill(path:svgjs.Element, pattern:Pattern, docMaxSide:number) { 
    pathFillId(path) 
} 

在這個例子中,我想匹配從參數上寫着「路」,「模式」和「docMaxSide」。我想確保它不匹配第二行中的「path」(我稱之爲pathFillId)。

這裏是我當前的正則表達式:\(.*?(\w+):.*?\)

拆毀了

\(找開括號

.*?之前,它可能有東西,但括號

(\w+):捕獲單詞之後冒號前

.*?可能有冒號後面是更多的東西

\)關閉的括號

現在,它只會匹配的第一個項目,「路徑」。但我需要它來匹配我上面提到的所有單詞。

更新:我應該更具體。它只應該匹配,如果它是一個函數參數。例如,我不想在以下內容中匹配path1var path1:string。困難在於正則表達式只匹配parens之間的項目。

+0

'(\ w +):'獲取匹配來自索引1的組。[DEMO](http://regex101.com/r/qO1vG7/1)。你在用什麼語言? – Braj 2014-10-10 18:14:00

+0

Braj,看我的更新。 – isaachess 2014-10-10 19:44:59

回答

1

試試這個:

\w+(?=:) 

g修飾符(全球修飾符發現的所有元素,並不會在第一場比賽返回)


另見example



UPDATE

如果你只想在括號匹配參數,你可以這樣做:

\w+(?=:[\w.]+\s*[,)]) 


這裏是example for this regex

+0

超級接近!這適用於我給出的例子(我只是仰視lookarounds,真棒),但它對於所有情況都太鬆散。它也匹配'var path2:string =「hello」'中的'path2',但我只希望它匹配函數中的參數。這就是爲什麼我包括在括號內的東西。有什麼想法嗎? – isaachess 2014-10-10 19:40:00

+0

太棒了。非常感謝。現在我只需要解析它來了解那裏發生了什麼。 :) – isaachess 2014-10-10 20:31:34

0

你問題是你的正則表達式的這部分:.*?。所以你指定你想要任何字符(.),這是正確的。但是您必須決定*?之一 - *意味着{0,},?意味着{0,1}

如果這沒有幫助,你可以用regexe.com或類似的方法測試你的正則表達式。