2

3桁より長く、指定された範囲内の年を含まない数値を抽出する必要があります(たとえば、との間19xx2020常にXX文字列の最後にあります)。

私は現在、次のパターンを使用しています。

/(?!19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\d{3,}$/i

「something2012」で式をテストすると、常に結果が得られ012ます。取得する必要がありますnull

var s = "moose high performance drive belt 2012";
s.match(/(?!19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\d{3,}$/i);

この式が日付の終わりと誤って一致するのはなぜですか?

4

2 に答える 2

2

を破棄something し、一致を試み2012ますが、負の先読みアサーションが原因で失敗し、次に一致を試みます。012これは、実際には、負の先読みアサーションと一致しないため成功します。012

アップデート:

これはきれいではありませんが、1つの解決策です。おそらくあなたはそれを単純化することができます。

    (?!(?:19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\D)(?<!\d)\d{3,}

ここでデモを参照してください:http://rubular.com/r/FLiehrUEp8

于 2012-06-26T18:33:21.957 に答える
1

1900年から2029年の間、正規表現である必要があります \b(\d+)\b(?<!(?:19\d{2}|20[0-2]\d))

于 2012-06-26T20:38:24.720 に答える