2011-07-04 45 views
1

嗨亲爱的粉丝!jQuery preg替换

为了简短起见,我有一个文本框,在这里你可以粘贴<img>标签,它看起来像这样: <img src="123.jpg" />

有什么办法可以使这些<img>看起来这个:<img src="img/upload/username/123.jpg" />使用jQuery .replace()或类似的东西?或者我应该使用PHP函数吗?

我试图找出一些regual表达什么jQuery的.match()回报:

x = text.match(/\<img src="(.*)" \/>\$/); 
alert(x); 

,但它返回奇怪的事,当有一个以上的<img>标签。

谢谢你的帮助!

+1

我没有看到一个jQuery这里... –

+0

嗯,也许我说错了什么,但仍然有任何方法来将所有指定的“img”标记使用JavaScript转换为另一个src到另一个? – Dmitri

+0

您要找的是6572214;) –

回答

4

未测试......

$('#text').change(function(){ 

    $('img').each(function(){ 
     $(this).attr('src', '/img/upload/username/' + $(this).attr('src')); 
    }); 

}); 

如果你想做到这一点与PHP服务器端只需更换这样,无需正则表达式...

$text = str_replace('src="', 'src="/img/upload/username/', $text); 

或者如果你想使用正则表达式...

$text = preg_replace('#"(.*?)\.jpg"#is', '"/img/upload/username/\\1.jpg"', $text); 
+0

该死的,真正的解决方案!非常感谢! – Dmitri

+0

@Dmitri,没问题,用例如'$('#preview img')'替换'$('img')',否则它会替换页面上的所有图片; –

0
var text = '<img src="img/upload/username/123.jpg" />'; 
x = text.match(/\<img src="(.*)" \/\>$/); 
alert(x); 

现在你会得到?

match(/\<img src="(.*)" \/\>$/); 
         ^
          |-----------------Becarefull about about ur special char dude.... 
+0

@Dmitri:你得到兄弟.. ...... – K6t

+0

当有超过1个“img”标签时,似乎不能很好地工作! – Dmitri

1

你想在jquery中使用的函数是.attr()并用你喜欢的任何东西替换内容。这里是教程页面:http://api.jquery.com/attr/

+0

也谢谢!为什么我没有想到第一个地方 – Dmitri

1

但它返回奇怪的东西,当有多个标签。

我认为这是你没有使用懒惰匹配的问题。取而代之的(.*)使用(.*?)

+0

谢谢你的提示! – Dmitri

0

你的正则表达式返回不是你所期望的一个以上的标签,因为你在这里使用一个贪婪的量词:

x = text.match(/\<img src="(.*)" \/>\$/); 
          ^

要解决这个问题试试这个:

x = text.match(/\<img src="(.*?)" \/>\$/); 

我不确定你的逃跑...。通常情况下,你不需要转义<,我也不明白\$最后的好处。它不在你的字符串中。如果你想有一个字符串结束的锚点,那么不要转义它,但是如果你想插入多个标签,你根本不能使用它。

0

有点洁癖可能是,但:

$(document).ready(function() { 
    $("#text1").change(function() { 
     var val = $(this).val(); 
     var tmp = $(val); 
     var img = tmp.filter("img:eq(0)"); 
     if (img.length == 0) { 
      alert("Please enter an <img/> tag!") 
     } 
     else if (img.attr("src") == undefined) { 
      alert("Please enter an <img/> tag with src attribute!") 
     } else { 
      img.attr("src", "/img/upload/username/" + img.attr("src")) 
      var div = $("<div/>").append(img); 
      $(this).val(div.html()) 
     } 
    }) 
}); 

Demo here