正则表达式匹配这个,或那个,或者在一个url中的这个AND

时间:2017-06-22 10:12:57

标签: javascript regex

所以我使用以下正则表达式来匹配元素中的url:

(<.*?>)((?:https?:\/\/)?(?:www\.)?)([\w-]+)((?:\.\w+)(?:\.\w+)*)(.*?)(<\/.*?>)

到目前为止,此工作正常,但它也会匹配这些元素:

<b>I.Am.Not.A.Url</b>

这是因为我的表达式正在寻找http://https://后跟www.,除非它们都是可选的。因此,即使这些都不存在,它也会匹配。

我希望能够做的是,如果字符串中存在其中一个或全部,则匹配:

<b>http://website.com/</b> - Match
<b>http://www.website.com/</b> - Match
<b>https://website.com/</b> - Match
<b>https://www.website.com/</b> - Match
<b>www.website.com</b> - Match
<b>website.com</b> - No match

1 个答案:

答案 0 :(得分:1)

由于(?:https?:\/\/)?(?:www\.)?匹配可选的https://http://,然后是可选的www.,因此您将获得缺少这些模式的匹配项。

要求其中一个,请将此模式部分转换为替换:

(https?:\/\/(?:www\.)?|www\.)

这将使其匹配

  • https?:\/\/(?:www\.)? - 一个带有可选www.的协议
  • | - 或
  • www\. - www.子字符串。

查看regex101 demo