【问题标题】:RegularExpression to Extract Url For Javascript为 Javascript 提取 URL 的正则表达式
【发布时间】:2013-04-04 03:24:28
【问题描述】:

我有一个正则表达式,可以从给定的字符串中提取 url。它在 C# 中,我想将其转换为 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;

如何轻松转换它?我得到以下 SyntaxError: invalid quantifier

【问题讨论】:

  • “没有逐字记录,它给了我错误”您能否具体说明这是什么意思以及您的错误是什么
  • 你为什么要用regex来提取url
  • @The_Land_Of_Devils_SriLanka 您将如何识别给定字符串中的 url 模式。该字符串有多个 url。
  • @JustinHomes 正则表达式用于定期出现的模式。从 html 解析 url 永远不应该使用正则表达式来完成,因为它从未用于此目的。html 不是 严格(xhtml 除外)并且肯定会破坏您的代码...您最好使用像 htmlagilitypack 这样的解析器..即使您的字符串不是 html,您仍然可以提取所有网址的
  • htmlagilitypack 是服务器端解决方案,我需要客户端解决方案

标签: c# javascript regex


【解决方案1】:

(?i) 不是在 JavaScript 中设置 ignoreCase 标志的有效选项(虽然在 Opera 中被忽略,但它似乎会为您抛出 SyntaxError )。 flags 仅作为正则表达式文字的后缀给出,或作为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");

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 2011-11-09
    • 2018-11-28
    • 2023-03-27
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多