preg_match:javascript url string

时间:2016-06-16 19:16:44

标签: javascript regex pattern-matching src

我正在尝试构建一个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)([\"'])#";

3 个答案:

答案 0 :(得分:2)

这样的事可能适合你:

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

替换:

http://example.com/

Regex Demo

上述正则表达式将匹配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);