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/
上面的正则表达式将匹配 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);
我正在尝试构建一个 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/
上面的正则表达式将匹配 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);