2016-08-11 84 views
0

我想用正則表達式來替換圖像,視頻和其他網址來作爲消息。我認爲一切正常,但最近一次更換像www.google.com這樣的網址時遇到了問題。它現在將localhost:3000添加到這些網址的前面。我不是最好的正則表達式,但它看起來像正則表達式工作在HTML中,因爲href是www.google.com。任何人都可以幫助看到哪裏出錯?Javascript正則表達式url替換

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>') 
+0

不完全理解問題......你可以多發一些代碼嗎?特別是'文本'變量的價值是什麼? –

+0

文本是由用戶發送的消息,因此它可以是任何內容。此功能的作用是檢查它是否是圖像,視頻或網址,並用正確的標記替換它。前兩個似乎工作正常,但最後一個想要添加localhost:3000到它的前面 –

+0

如果問題只與最後一個,你可以減少問題,只有?看起來沒有必要我們看看正在工作的代碼部分。 – trincot

回答

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>');