2012-05-31 31 views
12

私は正規表現文字列が一致?

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

var string = 'abc234832748374asdf7943278934haskhjd';

のようなJavaScriptで長い文字列を持っている - 私は

string.match(\abc[^abc]|\def[^def]|)のように試してみましたが、それdoesntのは私の両方の文字列を取得する - されることを私はそれらの後に番号が必要なので?

基本的に私はabcの後に8文字を、defの後に8-11文字を必要としますか?これどうやってするの ?

答えて

25

を試してみてください。

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

あなたはここでそれをテストすることができます。http://www.regular-expressions.info/javascriptexample.html

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

1

あなたは8桁の数字が続く文字列abcためabc[0-9]{8}を一致させることができます。

最初の3つの文字は任意であり、8〜11桁その後場合は、8-11数字が続くリテラル文字列abcdefをしたい場合は、あなたのようなものが必要[a-z]{3}[0-9]{8,11}

1

するために、複数行

9

ためignoreCaseは

のグローバル

"i"ため

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

はグラムで終わる

"g"、完全一致を得るために正規表現を下回る

"m"を使用します精巧な次のように既に掲載答えに、あなたは、グローバルマッチを必要とする:

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

これは、文字列のすべてのサブセットと一致します:「ABC」または「DEF」と

  • 開始。
  • は、その後、8-11桁の数字が続いている
  • 部分| "(DEF ABC)" です。これは、 "\ 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);
+1

+1時間をかけて説明を書いてください! –

関連する問題