2016-04-14 4 views
0

私はこの90%の時間t0、t1が同じ長さのランダムな値を持っています。しかし、10%の時間は例外的です。Javascript - 長さが静的でないランダムな文字列から3桁を取得するにはどうすればよいですか?

var t0 ="6M1000000000000/1111111 XNFVSD XXXXXXXX 0298 0101010A0001 148"; 
var t1 ="6M1ABDDERREDDDDDD/EOPPP XPSWKQ X2222222 8081 1010101A0132 100 1221212 dfdf111"; 
var t2 ="6M1XEEDDD/XXXEEE  XTRY3U X1XXXXXX 0921 104Y011A114 148 01010101993938 11212>1122"; 

は、すべての場合においてiが(104Y011A114)から3つの値114、(0101010A0001)から(1010101A0132)から132及び001を取得しなければなりません。

私は

var find_3_digit = 0; 
var input = t2; // or t1, t0 
for(var i = 0; i< input.length; i++){ 
    if((i>=53) && (i<=56)) { 
     console.log('H - ', input[i]);    
     find_3_digit += input[i]; 
    } 
} 

を使用していたが、t2は格別ですので、私は値が14ではない(私のロジックを破壊された)114を取得します。

どうすればいいですか。001 from t0132 from t1114 from t2

+0

これらの文字列のパターンは何ですか?必要なサブセットは常に同じ位置から開始されますか?任意のシーケンスを含めることができますか、それとも事前定義された値ですか? – Justinas

+0

パターン:t2の場合は5ブロック、ブロック5の場合は104Y011A114です。ロジックはブロック5から来て、最後の3桁は114ではない14になります。 – YumYumYum

+0

ブランクで分割し、5番目の要素を取得し、最後の3桁を取得します。 –

答えて

1

複数のスペースに分割できます。あなたの番号が入っているセクションを返します。私はそれが常にindex 4であると仮定しており、最後の3文字を返します。

function getThreeDigits(string) { 
    return String(string).split(/ +/)[4].substr(this.length - 3); 
} 

var t0 ="6M1000000000000/1111111 XNFVSD XXXXXXXX 0298 0101010A0001 148"; 
var t1 ="6M1ABDDERREDDDDDD/EOPPP XPSWKQ X2222222 8081 1010101A0132 100 1221212 dfdf111"; 
var t2 ="6M1XEEDDD/XXXEEE  XTRY3U X1XXXXXX 0921 104Y011A114 148 01010101993938 11212>1122"; 

getThreeDigits(t0); // 001 
getThreeDigits(t1); // 132 
getThreeDigits(t2); // 114 
+0

これはいい男です。 jQueryを使わずに作業していただきありがとうございます。 – YumYumYum

+1

ありがとう!興味深い問題を解決する。お役に立てて嬉しいです。 – KevBot

0

正規表現を使用してください!グループを使用して必要なシンボルグループを取得し、最後の3文字を取得します。

1

まず空白に分割するよりも、文字列から重複空白を削除し、最後に第五要素の最後の3つの文字を取る:

$(document).ready(function() { 
 
    var strings = [ 
 
    "6M1000000000000/1111111 XNFVSD XXXXXXXX 0298 0101010A0001 148", 
 
    "6M1ABDDERREDDDDDD/EOPPP XPSWKQ X2222222 8081 1010101A0132 100 1221212 dfdf111", 
 
    "6M1XEEDDD/XXXEEE  XTRY3U X1XXXXXX 0921 104Y011A114 148 01010101993938 11212>1122" 
 
    ]; 
 

 
    var log = $('#log'); 
 

 
    $.each(strings, function() { 
 
    var string = this; 
 

 
    //remove duplicate spaces 
 
    string = string.replace(/\s+/g, ' '); 
 
    //split on spaces 
 
    var subStrings = string.split(' '); 
 
    //take last 3 chars 
 
    var value = subStrings[4].slice(-3); 
 

 
    log.append(this + ' - ' + subStrings[4].slice(-3) + '<br/>'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="log"> 
 

 
</div>

+0

ありがとう、残念ながら、jQueryを使用できません。両方の答えを受け入れることを愛する。 – YumYumYum

+1

@ YumYumYum jQueryは私のより速い応答のためのものです。すべての内部ロジックはjquery要素を使用しません。結果を表示したり、ループしたりするだけで、純粋なjsに簡単に変換できます – Justinas

+0

多くの多くのありがとう!!!! – YumYumYum

1

をそれは、この機能を行うことができます:

function GetDigits(input) { 
    var find_3_digit = ""; 
    for (var i = 56; find_3_digit.length < 3; i--) { 
     if (input[i] != " ") 
     find_3_digit = input[i] + find_3_digit; 
    } 
    return find_3_digit; 
} 

JSFiddle

関連する問題