我想使用ruby gsub将参数附加到url

时间:2012-06-19 06:58:47

标签: ruby regex

我在变量中包含了一些包含图像标记的HTML代码,例如

html_chunk = "<p><img src="https://www.eff.org/files/HTTPS_Everywhere_new_logo.jpgxcvxcvxcv" style="width: 360px; height: 311px; " /><img alt="" src="https://mylocal/media/a649vb?filename=1339756119888_sprites_ie6.png&amp;amp;type=attachment" /></p>"

我想将aditional参数说"&foo=123"附加到该变量中的图片代码的所有src属性中。

我尝试使用Ruby的gsub!方法

html_chunk.gsub!(/"(http[s]?:\/\/.*?\/([media]+).*\")/) {|src| "#{src}&foo=123}"}

但它会在像这样的引号之后附加参数

<img alt="" src="https://mylocal/media/a649?filename=1339756119888_sprites_ie6.png&amp;amp;type=attachment"&_foo=123 />

2 个答案:

答案 0 :(得分:1)

你需要保留最后一个“捕获组之外。[^”]表示任何不是引用的字符:

html_chunk.gsub! %r|"(https?://[^"]*/media/[^"]*)|, '"\\1&foo=123'

答案 1 :(得分:0)

在javascript中:

// Create a dummy DOM element
var dom = document.createElement( 'div' );
dom.innerHTML = html_chunk;

// Get all the images
var imgs = dom.getElementsByTagName( 'img' );

// Loop through'em
[].forEach.call( imgs, function( img ) {

    // Add a string to their src
    img.src += '&foo=123';
} );

我很确定ruby中有一个DOM解析器。