我的正则表达式与数字不匹配

My regex does not match numbers

本文关键字:不匹配 数字 正则表达式 我的      更新时间:2023-09-26

我是制作正则表达式的新手,所以这可能只是一个愚蠢的疏忽,但我的正则表达式(旨在匹配 URL)不起作用。我的目标是让它匹配任何网址,例如:

http://www.somewhere.com
somewhere.com
https://ww3.some_where-hi.com
www.goop.go/herp/derp.lol

我构建的正则表达式如下所示,但是,它与 http://t.co/GZhtBh6c 这样的 URL 不匹配,它在数字 6 处停止匹配(由 www.regexpal.com 确定)。

((http|https)://)?([a-z0-9]+'.)?[a-z0-9'-_]+.[a-z]+(/[a-z0-9'-_]*)*([a-z0-9'-_]*'.[a-z]+){0,1}

谁能告诉我为什么这不起作用?另外,我确信这不是最好的解决方案。如果你有一个更优雅的正则表达式,我很想看到它。

附言这个正则表达式将与javascript一起使用。

验证字符串是否包含 RFC 3986 中指定的 URL。 支持绝对和相对 URL。

这与您提供的样本等相匹配。它还允许您提取 url 的不同部分

^
(# Scheme
 [a-z][a-z0-9+'-.]*:
 (# Authority & path
  //
  ([a-z0-9'-._~%!$&'()*+,;=]+@)?              # User
  ([a-z0-9'-._~%]+                            # Named host
  |'[[a-f0-9:.]+']                            # IPv6 host
  |'[v[a-f0-9][a-z0-9'-._~%!$&'()*+,;=:]+'])  # IPvFuture host
  (:[0-9]+)?                                  # Port
  (/[a-z0-9'-._~%!$&'()*+,;=:@]+)*/?          # Path
 |# Path without authority
  (/?[a-z0-9'-._~%!$&'()*+,;=:@]+(/[a-z0-9'-._~%!$&'()*+,;=:@]+)*/?)?
 )
|# Relative URL (no scheme or authority)
 ([a-z0-9'-._~%!$&'()*+,;=@]+(/[a-z0-9'-._~%!$&'()*+,;=:@]+)*/?  # Relative path
 |(/[a-z0-9'-._~%!$&'()*+,;=:@]+)+/?)                            # Absolute path
)
# Query
('?[a-z0-9'-._~%!$&'()*+,;=:@/?]*)?
# Fragment
('#[a-z0-9'-._~%!$&'()*+,;=:@/?]*)?
$

在javascript中,这变成了

if (/^([a-z][a-z0-9+'-.]*:('/'/([a-z0-9'-._~%!$&'()*+,;=]+@)?([a-z0-9'-._~%]+|'[[a-f0-9:.]+']|'[v[a-f0-9][a-z0-9'-._~%!$&'()*+,;=:]+'])(:[0-9]+)?('/[a-z0-9'-._~%!$&'()*+,;=:@]+)*'/?|('/?[a-z0-9'-._~%!$&'()*+,;=:@]+('/[a-z0-9'-._~%!$&'()*+,;=:@]+)*'/?)?)|([a-z0-9'-._~%!$&'()*+,;=@]+('/[a-z0-9'-._~%!$&'()*+,;=:@]+)*'/?|('/[a-z0-9'-._~%!$&'()*+,;=:@]+)+'/?))('?[a-z0-9'-._~%!$&'()*+,;=:@'/?]*)?(#[a-z0-9'-._~%!$&'()*+,;=:@'/?]*)?$/im.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}

使用[A-z]而不是[a-z]您的小a-z只匹配小写字母。