查找并附加字符串

时间:2016-11-18 16:42:12

标签: javascript regex

修改:建议的问题/答案无法解决我的问题:让我改写一下:找到<img src="" />"之间的字符串,并将其替换为原始字母加上另一个字符串像?w=500这样的字符串。我认为这可能适用于正则表达式,但我也乐意以任何JS方式进行。我在这个上下文中没有jQuery ....

假设我有一个包含图像标记标记的字符串,其中包括:

<img src="supercool.jpg" />
<p>very cool</p>
<img src="mega.jpg" />

我如何使用正则表达式或其他方法将每个src属性附加一个给定的字符串(比如?w=500),以便我最终得到

<img src="supercool.jpg?w=500" />
<p>very cool</p>
<img src="mega.jpg?w=500" />

我在SO上看过类似的问题但是还没有设计出解决方案,我的正则表达式技巧太差了:)

4 个答案:

答案 0 :(得分:1)

我正在使用字符串替换共享一些PHP代码可能这可以帮到你。 用单引号将所有代码放在变量中,然后用.jpg替换jpg?w = 500。并使用纯文本设置标题。

Cells(Rows.Count,14)

答案 1 :(得分:1)

RegEx不了解元素或属性,因此以下正则表达式非常脆弱。它只查找src=""并将给定的字符串附加到引号之间的任何内容。对于一次性脚本,这应该足够了。对于任何更复杂的东西,使用适当的HTML解析器,如SAX或DOM。

var in = '<img src="asd.png" /> <img src="ddd.jpeg" />';
var out = in.replace(/src=\"(.*?)\"/g, "src=\"$1?w=500\"");

出:

  

<img src="asd.png?w=500" /> <img src="ddd.jpeg?w=500" />

如果你想在浏览器中尝试这样做(你没有指定),你需要这样的东西(jQuery):

$("img[src]").each(function() {
    this.src = this.src + "?w=500";
});

答案 2 :(得分:1)

基于this @Gumbo answer并假设您提供的字符串,img标记在src之前没有任何额外属性,您可以应用此RegEx。

let str = '<img src="supercool.jpg" /><p>very cool</p><img src="mega.jpg" />';
let res = str.replace(/<img src="(?:[^"\/]*\/)*([^"]+)"/g, '<img src="$1?w=500"');
console.log(res);

如果您不需要任何额外的考虑因素,您的问题看起来更像是我链接到您的问题的副本。

答案 3 :(得分:0)

对于非常简单的情况,您可以使用reg exp来匹配基本HTML,但是一旦它变得复杂,reg exp就是个坏主意。有时您需要清理一些代码并且工作正常。

根据您的情况,您的html结构很简单,因此您可以进行匹配。

var txt = document.getElementById("in").value;
var result = txt.replace(/(<img.*\ssrc=['"])([^'"]+)/g, function(m, l, s){
    return m + (s.indexOf("?")!=-1 ? "&" : "?") + "w=500";
});
document.getElementById("out").value = result;
<textarea id="in" rows="4" cols="50">
  &lt;img src="supercool.jpg" /&gt;
  &lt;p&gt;very cool&lt;/p&gt;
  &lt;img src="mega.jpg?foo=bar" /&gt;
  &lt;img alt="boo" src="mega.jpg" /&gt;
</textarea>
<textarea id="out" rows="4" cols="50"></textarea>

但它可以很容易地破解....你最好创建一个DOM片段,使用DOM并更改属性。 DOM解决方案的问题是它会尝试加载图像,这是我认为你首先想要避免的。