2016-08-13 17 views
0

私が持っているコードはどこかのAPIから文字列を引き出し、Discordチャンネルに返します。出力をきれいに保つために、私は "<"と ">"記号でURLを囲む必要があります。JavaScriptの文字列内のURLの先頭と末尾に文字を挿入します

私はもともとsplit()関数で "http"で始まる空白と文字列を探していました。文字列がそれを保持している場合しかし、この場合には失敗し、例えば、そのよう:

var string = "I am a string (http://google.com)"; 

だから、私はこれらのURLを見つけて修正するために、文字列全体をスキャンするための方法はありますか?明確にするために

、私を探しています:

var string = "http://google.com" 
//to become 
var string = "<http://google.com>" 

これはまた、 "https" をして作業する必要があります。

この問題のお手伝いをさせていただきありがとうございます。

+0

正規表現を使用してください。スペースに頼らないでください。 –

+0

Regexが最初と最後に必要な値を追加するための最良のオプションです。 –

答えて

2

正規表現を使用して文字列内のURLを見つけ、<>に置き換えることができます。深さでは、溶液は@Crescent新鮮でhereを見つけることができます

var string = "I am a string (http://google.com)"; 
 

 
function url(text) { 
 
    var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
 
    return text.replace(urlRegex, function(url) { 
 
     return '<' + url + '>'; 
 
    }); 
 
} 
 

 
console.log(url(string));

+0

コンテンツに「google.com」というURLがある場合は、「https?| ftp | file」:\/\ /の部分の制限をオプション値として変更することができます –

+0

これはうまく機能しますが、ありがとうございました!それは複数の出現(私は言及を忘れている)のために働く。スニペットありがとう! – Ronan

0

http://のインデックスを検索すると、URLに許可されていない文字(スペース、/ ,.、#などの例外を含む英数字以外の文字)が最初に検出されます。

これは最も一般的な方法ですが、消費しているリンクを監視する際に最適化することができます。

+0

申し訳ありませんが、私は複数のインデックスを見つける方法について良いアイデアを得ました。どのように私は最初の許容されない文字を探しますか?私は、インデックスの開始時にstring.split()を想像し、文字列の残りの部分をスキャンしますか?私はその最後の部分をどうやってやるのかについてはあまり確信していません。 – Ronan

1
@Ivan答えの

だけ補完

あなたは(REGXを使用して置き換えることができます)機能

var string = "I am a string (http://google.com)"; 
 
var output = string.replace(/(https?:\/\/(www\.)?[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}\b([[email protected]:%_\+.~#?&//=]*))/,"<$1>"); 
 
console.log(output);

希望すると便利です