代码之家  ›  专栏  ›  技术社区  ›  WiredPrairie

如何使用正则表达式在全文中查找URL

  •  1
  • WiredPrairie  · 技术社区  · 15 年前

    下面的正则表达式在许多在线JavaScript正则表达式测试程序(和regexbuddy)中都能工作,但在我的应用程序中却不能工作,这有什么问题?

    它旨在用超链接替换URL。Javascript可以在Javascript文件中找到。

    var fixed = text.replace(/\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]/ig, "<a href='$&' target='blank'>$&</a>");
    

    例如,Chrome抱怨&无效(IE8也是如此)。有没有什么方法可以不借助RegEx对象而避开符号(或者其他错误的东西)?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Alan Moore Chris Ballance    15 年前

    这些测试人员允许您以原始形式输入regex,但是当您在源代码中使用它时,您必须以字符串文本或regex文本(这里的情况就是这样)的形式编写它。JavaScript使用正斜杠作为regex文本分隔符,因此您必须转义regex本身中的任何斜杠,以避免混淆解释器。

    一旦你摆脱了斜杠,它应该停止抱怨符号。这很可能是由格式错误的regex文本引起的。

    我认识那个regex,前几天我自己也用过;你从RegexBuddy的图书馆买的,是吗?如果您使用RB的“Use”特性来创建一个与JS兼容的regex,那么它将为您跳过斜杠。

        2
  •  0
  •   Matt    15 年前

    这在Chrome中对我有效

    var fixed = text.replace(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/igm, "<a href='$1' target='blank'>$1</a>");