【问题标题】:Javascript Regex url replaceJavascript 正则表达式 url 替换
【发布时间】:2016-08-11 15:18:27
【问题描述】:

我正在尝试使用正则表达式来替换作为消息传入的图像、视频和其他 url。我以为一切正常,但在替换 www.google.com 之类的 URL 的最后一个案例中遇到了问题。它现在将 localhost:3000 添加到这些 url 的前面。我不是最好的正则表达式,但看起来正则表达式在 HTML 中工作,因为 href 是 www.google.com。谁能帮忙看看哪里出了问题?

var image_url = /([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;
var message = text.replace(image_url,'<a href="$1" target="_blank"><img    width=100px height=100px src="$1"/></a>')
var video_url = /([a-z\-_0-9\/\:\.]*\.(mp4|webm|ogg))/i;
message = message.replace(video_url,'<a href="$1" target="_blank"><video src="$1"></video></a>')
var exp_url = /(?:^|[^"'])(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi;
message = message.replace(exp_url,'<a href="$1" target="_blank">$1</a>')

【问题讨论】:

  • 不完全理解问题......你能发布更多的代码吗?特别是“文本”变量的值是多少?
  • 文本是用户发送的消息,因此可以是任何内容。该函数的工作是检查它是图像、视频还是 url,并用正确的标签替换它。前两个似乎工作正常,但最后一个想将 localhost:3000 添加到它的前面
  • 如果问题只是最后一个问题,你能把问题简化为那个吗?我们似乎没有必要查看正在运行的代码部分。
  • 想添加localhost:3000吗?或者你是说神奇地有一个不需要的localhost:3000 出现在某个地方?请提供message 值,以便我们重现问题。
  • 我补充说,因为最终的正则表达式(exp_url)必须考虑他们添加一个锚标签,如果它已经找到一个锚标签,则忽略该 url

标签: javascript regex


【解决方案1】:

能够弄清楚。如果它不存在,我就没有添加 http://。

var image_url = /([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;
var message = text.replace(image_url,'<a href="$1" target="_blank"><img width=100px height=100px src="$1"/></a>')
var video_url = /([a-z\-_0-9\/\:\.]*\.(mp4|webm|ogg))/i;
message = message.replace(video_url,'<a href="$1" target="_blank"><video src="$1"></video></a>')
var http_reg = /(?:^|[^"'])(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
message = message.replace(http_reg, '<a href="$1" target="_blank">$1</a>');
var www_reg = /(?:^|[^"'])(^|[^\/])(www\.[\S]+(\b|$))/gim;
message = message.replace(www_reg, '$1<a href="http://$2" target="_blank">$2</a>');

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2010-11-12
    • 2016-09-23
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多