0

我有这个正则表达式:/href=('|")(\w+|\/dashboard)/它匹配每个 HTML 锚点,其 href 以/dashboard, 或开头something/without/a/slash/at/the/beginning

所以这个正则表达式匹配:

<a href="/dashboard/security-settings"></a>
<a href='dashboard/security-settings'></a>
<a href='something/security-settings'></a>

但不是:

<a href="/home"></a>
<a href="/about"></a>

这里的问题是它也匹配:

<a href="http://www.google.com"></a>
<a href="www.facebook.com"></a>

如何过滤从正则表达式开始httpwww从正则表达式开始的href?我尝试与操作员一起玩,但^没有运气:

href=('|")(([^http][^www]|\w+)|\/dashboard)
4

2 回答 2

1

^字符类中适用于单个字母,而不是字符串。所以[^http]实际上意味着“匹配一个既不是 anh也不是 at的字符p”。

您需要一个否定的前瞻断言

href=(['"])(?!http|www)(\w+|/dashboard)
于 2013-07-04T13:22:38.770 回答
0

最简单的解决方案是:

/^href=['"](\w+|\/dashboard)/

运算符(如果在正则表达式的^开头使用)确保正则表达式仅在行首匹配,因此它仅匹配以 . 开头的字符串href

正如其他人所提到的,您可以使用否定前瞻http来显式过滤掉以or开头的字符串www。但是,如果字符串以ftp://(或“http”或“www”以外的任何前缀)开头,则仍将使用“http”和“www”的负前瞻进行匹配。在这种情况下,使用白名单似乎比包含您不想匹配的所有内容的黑名单更好。

于 2013-07-04T14:06:56.370 回答