2013-04-11 48 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");