我正在对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"
提前感谢任何帮助/提示/指示。
答案 0 :(得分:2)
添加“?”在最后一个引用之前的“*”。这将使“*”非贪婪,即:它将在第一个引号停止匹配,而不是最后一个
/(href|src)?\="http:\/\/www\.mydomain\.com\/(?:(?!\.js).)*?"/
答案 1 :(得分:1)
答案 2 :(得分:1)
这里有点不同。我在Debuggex中使用了这个表达式:
(?:src|href)=(?&.quotStr)(?<!\.js")
将它编译成这个:
$regex = '/(?:src|href)=(?:"((?:\\\\.|[^"\\\\]){0,})")(?<!\\.js")/';
答案 3 :(得分:0)
修改强>
请参阅:https://stackoverflow.com/a/18838123/1163653以获得更好的解决方案。
修正了它:
/(href|src)?\="http:\/\/www\.mydomain\.com\/(?:(?!\.js"|").)*"/
请注意,前瞻是检查不包含.js
或 "
的任何字符串(在域之后),这两种字符串都会导致其无效。它允许href以[{1}}结尾,因为它们只有在到达第一个.css
时才会失败,这是所需的行为。