我正在尝试构建一个REGEX模式,将相对网址转换为javascript脚本中的绝对网址。
示例:我想替换以下所有实例(取自js脚本):
url('fonts/fontawesome-webfont.eot?v=4.2.0');
并返回以下内容:
url('http://example.com/fonts/fontawesome-webfont.eot?v=4.2.0');
适用于HTML标记的示例模式(link):
$pattern = "#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#"
首选使用此模式:
$result = preg_replace($pattern,'$1http://example.com/$2$3', $result);
我设法猜到的最近(失败)是:
$pattern = "#(url\s*=\s*[\"'])(?!http)([\"'])#";
答案 0 :(得分:2)
这样的事可能适合你:
/(?<=url\((['"]))(?!http)(?=.*?\1)/
替换:
http://example.com/
上述正则表达式将匹配url('
之后的位置,其中报价也可以是双引号。
(?<=...) # is a positive lookbehind
(?!...) # is a negative lookahead
(?=...) # is a positive lookahead
\1 # refers to capturing group 1, in this case either ' or "
请注意,JavaScript中不支持lookbehinds,但是使用PHP。
答案 1 :(得分:0)
我的测试显示这将有效:
IsDeleted
所以你的替换应该是这样的:
/url\\(['\"](?!http[s]?:\\/\\/)(.+)['|\"]\\)/
不是一个正则表达式的主人 - 所以带着一粒盐
答案 2 :(得分:0)
我使用的解决方案(感谢来自andlrc和chris85的帮助):
$result = preg_replace("#(?<=url\((['\"]))(?!https?)#",'http://example.com/', $result);