2014-10-26 65 views
2

我正在嘗試在javascript中編寫正則表達式來識別json中發現的任意javascript函數的字符串表示形式,即。像Javascript正則表達式以模式結尾

{ 
    "key": "function() { return 'I am a function'; }" 
} 

這是很容易識別的開始,但我無法弄清楚如何識別結束雙引號,因爲該功能可能還包含轉義雙引號。我最好的嘗試迄今

/"\s*function\(.*\)[^"]*/g 

它工作得很好,如果有在函數的字符串沒有雙引號。 json鍵值的結尾將以雙引號和隨後的逗號或右括號結束。有沒有一些方法來檢索所有字符(包括換行?)直到

not "/s*, and not "/s*} 

一個否定模式等......或者我需要採取沒有正則表達式完全不同的方法?

這裏的是當前的測試數據我的工作: http://regexr.com/39pvi

回答

1

好像你想是這樣的,

"\s*function\(.*\)(?:\\.|[^\\"])* 

它還匹配的插圖中\"逃脫雙引號。

DEMO

+0

它不工作,如果有'在這樣的函數體\ N':' 「功能(){ 回報 '你好\ n樂趣 ction東西';}」' – friedi 2014-10-26 17:42:13

+0

它作品,請參閱http://regex101.com/r/oY5jU1/1。 ''[^「\\] *'也會匹配換行符。 – 2014-10-26 17:46:25

+0

如果此'()'塊中存在任何'\ n',那麼他需要改變正則表達式,如'\ s * function \你可以切換這兩個部分,並省略\\:'「\ s * function \(。* \)。\\ s \ s] *?\)(?:[^」\\] | \\「)*' – 2014-10-26 17:48:34