正则表达式匹配HTML文件中的某些src和href

时间:2014-04-27 15:43:56

标签: html regex

我正在构建一个脚本来扫描HTML文件,并在某些条件下替换所有'src'和'href'属性。这是我现在的正则表达式 - (href|src)=["|'](.*?)["|']

我不确定是在扩展(.*?),除非它包含mailto:https://或者不包含http://www.google.co.uk

此脚本的基本思想是替换SSL未涵盖的所有资产,并将其置于SSL安全URL下。

有谁知道如何实现这一目标?

非常感谢。

2 个答案:

答案 0 :(得分:3)

这是您的表达式,其中包含一些用于改进语法的调整:

(?:href|src)=(["'])(?!mailto|https).*?\1
  1. 我认为您不需要将hrefsrc捕获到自己的捕获组中,因此非捕获组将执行:(?:
  2. 我们从字符类中删除|的开头引号,因为它不代表OR
  3. 我们使用(["'])将开头报价捕获到第1组,这使我们能够通过使用反向引用\1来确保结束报价是相同的类型。否则,您的表达式将匹配src="http://google.com'(双引号和单引号=不平衡)
  4. 请注意以下内容中括号的变化。否定前瞻不需要成为捕获组的一部分。
  5. 懒人星点.*?大概不需要在捕获组中
  6. \1指的是捕获第1组,也就是说第一个捕获括号的内容,即单引号或双引号,确保我们在开头匹配相同类型的引号,最后。

答案 1 :(得分:0)

好了一点研究后我找到了答案。我的正则表达式已扩展到下面。

(href|src)=["|']((?!mailto|https).*?)["|']。以下示例 -

src="http://google.co.uk"       > match
src='http://google.co.uk'       > match
src="/css/test.css"             > match
src='/css/test.css'             > match
src="css/test.css"              > match
src='css/test.css'              > match
src="https://google.co.uk"      > no match
src='https://google.co.uk'      > no match
src="mailto:test@google.co.uk"  > no match
src='mailto:test@google.co.uk'  > no match