web-dev-qa-db-ja.com

正規表現の文字列の一致?

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

_var string = 'abc234832748374asdf7943278934haskhjd';_

のようにマッチしようとしています

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

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

基本的に、abc + 8文字後とdef 8-11文字後が必要ですか?これどうやってするの ?

17
Andy

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

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

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

11桁以上より多くと一致させたくない場合は、アンカー(または[^0-9])文字列の最後。 8個以上の場合は、{8,11} with {8}

32
paxdiablo

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

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

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

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

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

あなたの質問では、数字ではなく8-11 charactersを要求しました。数字でも他の文字でも構いませんが、「。」を使用できます。 「\ 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);
11
Joe Sarre

abc[0-9]{8}文字列abcの後に8桁が続きます。

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

1
0605002

以下の正規表現を使用して完全に一致するものを取得し、

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

Gで終わる

"g"はグローバル

"i" for ignoreCase

"m"複数行の場合

1
premnathcs