2012-09-10 126 views
1

由於可讀性在下面顯示的正則表達式中有點缺失,我想將它分成幾行。我將如何做到這一點,以及需要更改/逃脫的內容?在javascript中打破正則表達式?

regex = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))/i; 

感謝

+0

你不能。另外我懷疑它會增加可讀性。 – Christoph

+0

這個正則表達式實際上做了什麼?有可能縮短和優化正則表達式 – diEcho

+1

如果你想做它,你可以使用一個字符串和'RegExp'構造函數,它可以讓你把表達式分解成_「有意義的」_部分......雖然,我必須說:看起來這個表達式將用於HTML,在這種情況下:只需解析DOM –

回答

1

JavaScript不支持多行正則表達式。你可以從字符串中創建一個正則表達式,但:

r = new RegExp( 
"\\b" + 
"(" + 
"(?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)" + 
"(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+" + 
"(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»「」‘’])" + 
")", "i") 

(我希望我得到的字符串建築語法正確 - 我不是一個JavaScript的人,因此,如果這也不行,讓我知道)

+0

你不需要反斜槓(事實上它們會產生語法錯誤),JS會自動查找下一行。 – Gijs

+0

@Gijs:謝謝!固定。 –