2013-04-11 89 views
0

我有一個正則表達式,可以從給定的字符串中提取網址。這是一個在C#中,我想將其轉換爲JavaScript:RegularExpression爲JavaScript提取網址

private static Regex urlPattern = new Regex(@"(?i)\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`!()\[\]{};:'"".,<>?«»「」‘’]))", RegexOptions.Compiled | RegexOptions.IgnoreCase); 

但是當我嘗試這一點,因爲有沒有逐字它給我的錯誤:

var regexToken = /(?i)\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; 

我怎麼能很容易地轉換呢?我得到以下語法錯誤:無效的量詞 enter image description here

+0

「沒有逐字,它給我的錯誤」可以請你說明這是什麼意思和你**錯誤是什麼** – tnw 2013-04-11 19:27:12

+1

你爲什麼使用'regex'來提取'url'? – Anirudha 2013-04-11 19:27:15

+0

@The_Land_Of_Devils_SriLanka如何識別給定字符串中的url模式?該字符串有多個網址。 – 2013-04-11 19:34:11

回答

1

(?i)是設置IGNORECASE標誌在JavaScript中沒有有效的選項(而在Opera忽略不計,這似乎拋出一個SyntaxError你)。 標誌僅作爲正則表達式的後綴給出,或作爲RegExp constructor的第二個參數中的字符串給出。

此外,你忘了逃避斜線 - 因爲劃定文字,他們需要逃脫。

二者必選其一

var regexToken = /\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; 

或(稍微複雜)

var regexToken = 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");