2016-10-25 9 views
-1

ループしている文字列の配列(下の例)があり、最後のIDと名前を取得できる必要があります。分割されている文字の両側の文字に基づいて文字列を分割する方法

/18264:Blues (all)/19307:Acoustic Blues 
/18264:Blues (all)/19308:Blues 
/18267:Dance/Electronica 

上記の例から、私はこれを達成したい:

id: 19307 
name: Acoustic Blues 

id: 19308 
name: Blues 

id: 18267 
name: Dance/Electronica 

だから、最後のIDと名前を取得していますが、私は彼らにスラッシュ(IEダンス/エレクトロニカを)持っている名前の問題を抱えていますそのスラッシュを無視する方法はありますか?私のコードは次のとおりです(例):

angular.forEach(obj, function(val, key) { 
    // /18264:Blues (all)/19307:Acoustic Blues 
    var str = key.split('/').pop(); 
    // 19307 
    var id = str.split(':')[0]; 
    // Acoustic Blues 
    var name = str.split(':')[1]; 

    newObj.push({ 'id': id, 'name': name }); 
} 

あなたの意見を教えてください!

カール

答えて

3

これは、正規表現を助けることができる場合である - 彼らはこのような文字列のパターンを照合するために設計されています。内部に、少なくとも1桁 - エスケープ/ - - 開始スラッシュ

  • (\d+)

    • \/

      \/(\d+):([^:]*)$ 
      

      これは、で構成されています。この問題については、次の正規表現を使用することができますIDを取得するためのキャプチャグループ

    • : - 文字通りコロン
    • ([^:]*) - キャプチャグループは、名前
    • $に取り込むために、コロンよりも、何もを探して - 次のように文字列の末尾を

    あなたのコードでこれを使用するには、そうすることができます。

    angular.forEach(obj, function(val, key) { 
        //note the extra/at the start and end, denoting this as a regular expression 
        //in javascript 
        var result = /\/(\d+):([^:]*)$/.exec(key); 
        var id = result[1]; 
        var name = result[2]; 
    
        newObj.push({ 'id': id, 'name': name }); 
    } 
    

    resultは配列です。インデックス1と2は、正規表現のキャプチャグループに対応しています。

    何が起きているかを視覚化するために、正規表現の詳細を表示するには、regex101.comのような多くのオンラインツールが役立ちます。

  • +0

    アメージング、綿密な説明のためのおかげで - 私はいくつかの正規表現の中に自分自身を取得する必要がすることがありますように見えます!完璧に働いた、もう一度ありがとう。 – CarlTaylor1989

    1

    これはいかがですか?

    var lines = ["/18264:Blues (all)/19307:Acoustic Blues", "/18264:Blues (all)/19308:Blues", "/18267:Dance/Electronica"]; 
     
    
     
    var newObj = []; 
     
    for (var i = 0; i < lines.length; ++i) { 
     
        var line = lines[i].split(/:/); 
     
        newObj.push({"id" : line[line.length - 2].split(/\//)[1], "name" : line.slice(-1)[0]}); 
     
    } 
     
    
     
    console.log(newObj);

    関連する問題