我正在构建一个脚本来扫描HTML文件,并在某些条件下替换所有'src'和'href'属性。这是我现在的正则表达式 - (href|src)=["|'](.*?)["|']
。
我不确定是在扩展(.*?)
,除非它包含mailto:
,https://
或者不包含http://www.google.co.uk
。
此脚本的基本思想是替换SSL未涵盖的所有资产,并将其置于SSL安全URL下。
有谁知道如何实现这一目标?
非常感谢。
答案 0 :(得分:3)
这是您的表达式,其中包含一些用于改进语法的调整:
(?:href|src)=(["'])(?!mailto|https).*?\1
href
或src
捕获到自己的捕获组中,因此非捕获组将执行:(?:
|
的开头引号,因为它不代表OR
(["'])
将开头报价捕获到第1组,这使我们能够通过使用反向引用\1
来确保结束报价是相同的类型。否则,您的表达式将匹配src="http://google.com'
(双引号和单引号=不平衡).*?
大概不需要在捕获组中\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