2017-01-28 16 views
0

私の関数は次のとおりです。入力からリンクを抽出することになっています。 (httpなどで始まり、 ""で終わります)。問題は、この関数がうまくいくかどうかをデバッグすることができないことです。私はその理由を調べようとしましたが、それでもまだ分かりません。JS関数がループに詰まった

function linkify(input) 
    { 
     if (input === undefined || input == null) 

     return input; 

     var tinput = input; 
     var urlextr = ""; 
     var url = [""]; 
     var num = 0; 

     //search for "http://" first 
     while(tinput.match(/http:\/\//gi) != null) 
     { 
      console.log("http"); 
      urlextr=tinput.substring(tinput.search("http://")); 
      urlextr=urlextr.substring(0,urlextr.search(" ")); 
      url[num] = urlextr; 
      url[num+1] = urlextr; 
      num = num + 2; 
      tinput = tinput.replace(urlextr,""); 
     } 

     //search for "https://" 
     while(tinput.match(/https:\/\//gi) != null) 
     { 
      console.log("https"); 
      urlextr=tinput.substring(tinput.search("https://")); 
      urlextr=urlextr.substring(0,urlextr.search(" ")); 
      url[num] = urlextr; 
      url[num+1] = urlextr; 
      num = num + 2; 
      tinput = tinput.replace(urlextr,""); 
     } 

     //search for "ftp://" (Why not?) 
     while(tinput.match(/ftp:\/\//gi) != null) 
     { 
      console.log("ftp"); 
      urlextr=tinput.substring(tinput.search("ftp://")); 
      urlextr=urlextr.substring(0,urlextr.search(" ")); 
      url[num] = urlextr; 
      url[num+1] = urlextr; 
      num = num + 2; 
      tinput = tinput.replace(urlextr,""); 
     } 

     //search for "www.*" (Must be last!) 
     while(tinput.match(/www./gi) != null) 
     { 
      console.log("www"); 
      urlextr=tinput.substring(tinput.search("www.")); 
      urlextr=urlextr.substring(0,urlextr.search(" ")); 
      url[num] = urlextr; 
      url[num+1] = urlextr; 
      num = num + 2; 
      tinput = tinput.replace(urlextr,""); 
     } 
     console.log(url); 
     return output; 
    } 
+0

そう思わないでしょう。 2ndはhtml文字列を使います。私のためには: "ランダムなメッセージとリンクwww.stackoverflow.com www.youtube.comなど..."関数は、すべてのURLが抽出された後になるはずだから、リンクを読み込んで変更します。他のJSを使用しない場合 – Di1997

答えて

2

別のURLをスペースで区切った文字列があるとします。問題は、あなたは、このように無期限に実行するループを作り、それは常に空の文字列を返します、あなたの文字列の最後のURLを処理している場合は

urlextr=urlextr.substring(0,urlextr.search(" ")); 

です。それを修正するには、以下のようにsthを行うことができます

urlextr=tinput.substring(tinput.search("http://")); 
urlextr=urlextr.substring(0,urlextr.search(" ")); 
if (!urlextr) { 
    url[num] = tinput.trim(); 
    break; 
} 
url[num] = urlextr; 
url[num+1] = urlextr; 
+0

これはうまくいきましたが、配列自体は次の順序になっているため、機能自体が壊れています。すべての偶数(0,2,4,6 ...)は完全なURLを持ち、奇数はすべて短縮URL 、またはユーザーがそれを書いた方法。 – Di1997

+0

'url [num] = urlextr; url [num + 1] = urlextr;'配列要素に同じ値を代入しています - コードを修正する必要があります – mic4ael

+0

すでに修正済みです。私は鉱山の修正を思いついた。したがって、関数は物事を完全に分離します – Di1997

関連する問題