用于构建自定义URL的正则表达式

时间:2016-12-11 19:10:15

标签: javascript regex url

我想创建一个正则表达式来匹配以http://,https://,//开头的网址,或者找到扩展名与html,htm,php和php3不同的网址。 URL查询子字符串是可选的

让我们说我想找到这些:

http://example.com
/example.mp3
/example.mp3?q=example
http://example.com/example.mp3
#example

拒绝这些:

example
/example
/example/
/example.htm
/example.htm?q=example
/example.mp3/example //The .mp3 needs to be extension to be accepted
/example#example

我已经尝试了这个/(^(http:\/\/|https:\/\/|\/\/|#)|(.*)((.*)\.^(?!html|htm|php|php3)$)(\?.*)?$)/igm,但它没有用。

如果相反(反转已接受和拒绝的列表)更容易做,即使非常感谢,我可以更改处理正则表达式的函数。

1 个答案:

答案 0 :(得分:1)

好像你可以使用

^(?:#.+|(?:https?:/)?/[^?#\n]*\.(?!(?:html?|php3?)\b)\w+(?:\?.*)?)$

请参阅regex demo

模式详情

  • ^ - 字符串开头
  • (?:#.+ - #后跟任何1 +字符
  • | - 或
  • (?:https?:/)?/[^?#\n]*\.(?!html?|php3?)\w+(?:\?.*)?) -
    • (?:https?:/)?/ - 可选http:/https:/然后/
    • [^?#]* - 除?#
    • 以外的0个字符
    • \. - 一个点
    • (?!(?:html?|php3?)\b)\w+ - 1个或多个字母/数字/下划线不等于htmhtmlphpphp3
    • (?:\?.*)?) - 可选的?后跟任意0+字符
  • $ - 字符串结尾