【发布时间】:2013-09-16 22:03:44
【问题描述】:
我正在对 HTML 字符串执行正则表达式以获取 URL。我想获取所有不是 javascript 的 href 和 src。从另一个 SO 帖子我有以下模式:
/(href|src)?\="http:\/\/www\.mydomain\.com\/(?:(?!\.js).)*"/
这让我得到如下结果:
src="http://www.mydomain.com/path/to/resource/image.gif" alt="" border="0"
这很好,因为它缺少.js 结果。这很糟糕,因为它在元素中获取额外的标签。我尝试了以下修改以停止在第一个":
/(href|src)?\="http:\/\/www\.mydomain\.com\/(?:(?!\.js).)[^"]*"/
它的工作原理是它返回 href="$url",但它返回以 .js 结尾的结果。有没有办法结合一个负面的前瞻说:
- 匹配字符串直到遇到另一个
"- 即[^"]*; 和 - 不匹配以
.js"结尾的字符串
提前感谢任何帮助/提示/指针。
【问题讨论】:
-
什么风格的正则表达式 - 可以使用lookbehinds吗?即
[^"]*(?<!\.js)(?=")会做我认为你要问的事情,(但不适用于 JavaScript 正则表达式,因为它不支持后视)。 -
@PeterBoughton PCRE(PHP 的
preg_match_all())。环顾四周按预期工作,只是没有按预期工作。