【问题标题】:Parsing text for URLs with trailing commas解析带有尾随逗号的 URL 的文本
【发布时间】:2012-09-01 13:41:45
【问题描述】:

我正在查看来自 Twitter 的 JSON 提要,并尝试使用正则表达式使 URL 可点击。

问题是文本中的 URL 带有尾随逗号。逗号可以合法地成为 URL 的一部分,但在这种情况下,它们只是用户插入的标点符号。

有没有办法解决这个问题?我错过了什么吗?

【问题讨论】:

  • 是的,但是您将无法排除实际上是标点符号的逗号。你可以有一个,但不能有另一个。搜索“链接 URL”。我在 Github 上有一个项目,你可能想看看:LinkifyURL 这里是linkify.js test page
  • 示例数据?一个 URL,后跟一个逗号,后跟另一个 URL。 foo,http://bar -- 如果幸运的话,逗号后面还有一个空格。在此处查看源代码可以看到 StackOverflow 的链接器代码也无法处理。

标签: regex json url


【解决方案1】:

你并没有错过什么;如果它以明文形式提供并被明文包围,则没有确定“预期” URL 的万无一失的方法。你最好的选择是做出有根据的猜测。

一种常见的方法是检查有问题的标点符号后面是空格还是字符串的终止符。如果是,不要将其解释为 URL 的一部分;否则,包括它。

请记住,此问题不仅限于逗号或单个字符(请考虑省略号,...)。

【讨论】:

    【解决方案2】:

    如果是标点符号,您可以忽略最后一个字符(这样 url 中间的标点符号不会影响它)。

    例如。正则表达式可能类似于:

    `([a-z/A-Z0-9.,]*?)([.,]?)\s`
    

    警告(正则表达式的第一部分不包括所有 url 内容,因此您仍然需要修复它。但本质上,我们有 ([a-z/A-Z0-9.,]*?) 与 URL 的主要部分匹配。* 允许许多字符,但我们使用? 这样它就不会贪婪。

    然后我们使用([.,]?) 匹配可能的尾随标点符号,使用\s 匹配空格或空格。

    因此第一个子表达式是 url,你可以把它变成一个链接。


    如果您可以访问互联网,您可以尝试访问该资源以查看它是否返回 404 以确定尾随标点是 URL 的一部分还是实际标点。

    【讨论】:

    • 好东西。但是,如果两个 URL 之间有逗号且逗号后没有空格,情况会怎样呢?第二个 URL 被视为第一个 URL 的子字符串。您必须同时处理pos 并确定某些看起来像 URL 的字符串是否在其他字符串中。
    • 嗯,两个 url 的连接本身就是一个有效的 url,所以不可能知道肯定。但是,在您获得一个可能是多个 URL 串联的 URL 之后,您可能做的最好的事情就是尝试匹配正则表达式 ,[a-zA-Z]://,然后在此进行拆分。这仅适用于有逗号,然后是启动下一个 url 的协议。
    • 无论如何,这将开始变得非常复杂。而且你必须在某个时候停下来,特别是由于这些可能性的模糊性。可能 99% 的 URL 格式正确,应该不会造成太大的困难(除了一个尾随逗号或句号)。
    猜你喜欢
    • 2019-03-09
    • 2012-06-18
    • 2022-06-15
    • 2017-04-29
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2022-01-05
    相关资源
    最近更新 更多