2016-06-02 2 views
-3

私はこの文字列を持っている:正規表現文字列、数値と一致した状態に変換

002 2.0 (100aa) 95-97 

は、私はそれのregex95-97部分をしたいと私は年を取得して、関連する二つの数字でそれを貼り付けます。 例では、96-971995-1997しかし00-052000-200520が貼付されるべきである016の間のすべての数値が、19他のすべての数値)となるべきなるはずです。

次に、1995-1997がある場合は、区間内に年(つまり)が存在するかどうかを確認して、ブール値を返します。 どのように1つのライトはそのようなコードですか?

敬具あなたはreplaceのコールバックバリアントを使用することができ

+1

は私たちにあなたの努力これまでにしてください – JohnPan

+0

を示し、ちょうどあなたが必要とする部品を取る正規表現する必要はありません。しかし、私はこれが唯一の文字列ではないと思われますので、あなたの質問に適応し、静的および可変部分が何であるかを示し、あなたが試したことを示し、失敗した場所を示してください。 – trincot

+0

ハイフンが最後の部分にしか表示されない場合は、それを見つけることで何が問題になりますか? – hlfrmn

答えて

1

:ソリューションがあれば、すぐに時代遅れになるだろうと私は、今年30で分割をした

function parseString(str) { 
 
    function padYear(year) { 
 
     return year < 30 ? 2000+year : 
 
       year < 100 ? 1900+year : year; 
 
    } 
 
    var result = {}; 
 
    result.hasCurrentYear = false; 
 
    result.str = str.replace(/(\d\d)-(\d\d)$/g, function (match, yr1, yr2) { 
 
     yr1 = padYear(+yr1); 
 
     yr2 = padYear(+yr2); 
 
     var yrNow = (new Date).getFullYear(); 
 
     result.hasCurrentYear = yrNow >= yr1 && yrNow <= yr2; 
 
     return yr1 + '-' + yr2; 
 
    }); 
 
    
 
    return result; 
 
} 
 

 
var str = '002 2.0 (100aa) 95-16'; 
 
console.log(parseString(str));

注意分割年として16を使用します。

+0

本当に良い解決法、ありがとう!:) – user1665355

+0

あなたは大歓迎です。リプレースコールバックの中に小さな修正を書き留めておきます。これは、 'result.hasCurrentYear'を' result'の接頭辞で読み取るべきです。 – trincot

0

ある年が「範囲」にあるかどうかを確認する方法はずっと簡単です。 String.splitArray.map機能やNumberコンストラクタ使っ
ソリューション:あなただけ、その文字列を持っている場合は

var str = "002 2.0 (100aa) 95-97"; 

function checkYearInRange(str, year) { 
    year = Number(year); 
    var range = str.split(" ").pop().split('-').map((v) => Number((Number(v) > 16)? "19"+v : "20"+v)); 
    return (range[0] <= year && year <= range[1]); 
} 

console.log(checkYearInRange(str, "1996")); // true 
console.log(checkYearInRange(str, "2015")); // false 
関連する問題