18

私はJavaScriptのような長い文字列を持っています

var string = 'abc234832748374asdf7943278934haskhjd';

私はのように一致しようとしています

abc234832748374-つまり-私は次のように試しました

string.match(\abc[^abc]|\def[^def]|)しかし、両方の文字列の後に数字が必要なため、両方の文字列を取得できませんか?

基本的にabc、+ 8 文字と 8 ~def11 文字の後に ?が必要です。これどうやってするの ?

4

4 に答える 4

35

リテラル文字列が必要な場合、abcまたはdefその後に 8 ~ 11 桁の数字が続く場合は、次のようなものが必要です。

(abc|def)[0-9]{8,11}

ここでテストできます: http://www.regular-expressions.info/javascriptexample.html

11 桁を超えて一致させたくない場合[^0-9]は、文字列の末尾にアンカー (または ) が必要になることに注意してください。8 個以上の場合は、 に置き換えることができ{8,11}ます{8}

于 2012-05-31T04:17:09.310 に答える
11

すでに投稿された回答を詳しく説明するには、次のようにグローバル マッチが必要です。

var matches = string.match(/(abc|def)\d{8,11}/g);

これは、次の文字列のすべてのサブセットに一致します。

  • 「abc」または「def」で始めます。これが「(abc|def)」の部分です
  • その後、8 ~ 11 桁が続きます。これは「\d{8,11}」の部分です。\d は数字に一致します。

"g" フラグ (グローバル) は、最初の一致だけでなく、すべての一致のリストを取得します。

あなたの質問では、数字ではなく8 ~ 11文字を要求しました。数字でも他の文字でもかまわない場合は、"." を使用できます。「\d」の代わりに。

また、一致例のそれぞれに、「abc」または「def」の後に 11 文字を超える文字があることにも気付きました。任意の桁数でよい場合は、次の正規表現の方が適している可能性があります。

  • 任意の桁数 -var matches = string.match(/(abc|def)\d*/g);
  • 少なくとも 1 桁 -var matches = string.match(/(abc|def)\d+/g);
  • 8桁以上 -var matches = string.match(/(abc|def)\d{8,}/g);
于 2012-05-31T04:36:50.380 に答える
1

以下の正規表現を使用して完全一致を取得します。

string.match(/(abc|def)\d{8,11}/g);

gで終わる

"g"グローバル向け

"i"ignoreCase の場合

"m"マルチライン用

于 2012-05-31T04:26:26.350 に答える
1

abc[0-9]{8}文字列のabc後に 8 桁の数字が続く場合に照合できます。

最初の 3 文字が任意で、その後 8 ~ 11 桁の場合は、[a-z]{3}[0-9]{8,11}

于 2012-05-31T04:16:52.233 に答える