【问题标题】:Regex for detecting url in plain form and in markdown [closed]用于以纯格式和降价检测 url 的正则表达式 [关闭]
【发布时间】:2017-02-26 23:52:58
【问题描述】:

我正在尝试在文本区域中捕获用户输入,该输入可能是三种格式中的任何一种的 url(以及类似的电子邮件) -

  1. Just plain url
  2. Markdown with title[text](url "title")
  3. Markdown without title[text](url)

现在,我为三种单独工作的格式中的每一种都提供了一个正则表达式 (javascript)。但是,如果我想做所有 3 个,第一个会阻止第二个和第三个激活。在我的代码中,在“空间”上,触发了正则表达式检测。因此,如果我有第一个正则表达式,则永远不会触发带有降价标题的正则表达式。

我想知道是否可以为第一个专门排除第二个和第三个格式的正则表达式?或者,更好的是,如果有一个用于捕获的正则表达式匹配所有 3 个?

另外,由于我不太擅长正则表达式,如果有人也能解释他们的正则表达式解决方案,我会很高兴,这样我就可以尝试对电子邮件检测做同样的事情。

谢谢!

【问题讨论】:

    标签: javascript regex markdown rich-text-editor


    【解决方案1】:

    首先,第二个正则表达式already works for the third format,所以我们只需要加入第一个和第二个。

    执行此操作的简单方法是使用|(“OR”)字符,如下所示:

    (<firstRegex>)|(<secondRegex>)

    Demo

    这样做的问题是它弄乱了捕获组。如果正则表达式捕获第一个模式,则 url 将位于不同的捕获组(我的演示中的第 4 个)而不是被第二个(第 2 个组)捕获的捕获组。

    在纯 URL 正则表达式中排除降价模式

    在纯 URL 模式的开头添加(?:^|[^\(\/]) 将强制正则表达式匹配任何不是左括号的字符,因此不包括降价情况。 url 必须使用捕获组提取,因为该字符将包含在匹配中。

    Demo

    【讨论】:

    • 谢谢,但还是有问题。我应该更好地解释这个问题。在我的代码中,在“空间”上,触发了正则表达式检测。因此,如果我有第一个正则表达式,则永远不会触发带有降价标题的正则表达式。关于如何避免这种情况的任何想法?
    • 对不起,我不明白。你能提供一个 JSFiddle 来演示正则表达式失败吗?
    • JSFiddle 在这种情况下有点难以重现,但让我在小提琴之前再次尝试解释一下。我的代码尝试检测用户类型但很懒惰。因此,当您开始输入 url 并添加空格(或逗号)时,它会将其检测为 url。都好。但是现在当您在添加空格的那一刻输入降价格式[text](url 时,会触发第一种情况的正则表达式并创建一个 url,从而阻止用户添加标题。这种解释有帮助吗?
    • 我想我得到了一个匹配纯 url 的正则表达式,但无法匹配 markdown 的。我使用了this regex 并在开头添加了这个模式(?:^|[^\(]),它将匹配除左括号之外的任何内容。 Demo
    • oo,这很接近,但需要 http。将您添加的模式组合到我拥有的第一个 url 匹配模式中会是理想的吗?顺便说一句,感谢您的帮助!
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多