preg_match: javascript url 字符串

preg_match: javascript url string

我正在尝试构建一个 REGEX 模式,以将 relative URL 转换为 javascript 脚本中的 absolute URL。

示例:我想替换以下所有实例(取自 js 脚本):

url('fonts/fontawesome-webfont.eot?v=4.2.0');

和return以下:

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,'http://example.com/', $result);

我猜得最接近的(未成功)是:

$pattern = "#(url\s*=\s*[\"'])(?!http)([\"'])#";

我的测试表明这会起作用: /url\(['\"](?!http[s]?:\/\/)(.+)['|\"]\)/

所以你的替换应该是这样的:

preg_replace("/url\(['\"](?!http[s]?:\/\/)(.+)['|\"]\)/",'http://example.com/', $result)

虽然不是正则表达式大师 - 所以对此持保留态度

类似这样的内容可能适合您:

/(?<=url\((['"]))(?!http)(?=.*?)/

替换:

http://example.com/

Regex Demo

上面的正则表达式将匹配 url(' 之后的位置,引号也可以是双引号。

(?<=...) # is a positive lookbehind
(?!...)  # is a negative lookahead
(?=...)  # is a positive lookahead
       # refers to capturing group 1, in this case either ' or "

请注意,JavaScript 不支持回顾,但 PHP。

我用过的解决方案(感谢andlrc和chris85的帮助):

$result = preg_replace("#(?<=url\((['\"]))(?!https?)#",'http://example.com/', $result);