2016-09-06 8 views
3

テキストから「ProcessName」と「ProcessID」の文字列のみを抽出しようとしています。 テキストにはより多くのキーが含まれている可能性があります。 (私は単純にするために2つのキーを持つテキストを使用しています) グループの複数のオカレンスをキャプチャすることは可能ですか?キャプチャ括弧を使用して複数のオカレンスをキャプチャする方法

var text = "[ProcessName] - [ProcessID]"; 
var regex = new RegExp(/\[[(A-Za-z0-9)]+\]/g); 
var result = regex.exec(text); 
console.log(result); 

私はexecを使用すると、私には1つのマッチとブラケットが付いているので使用しないようです。 enter image description here

また、試してみましたが、角括弧が含まれています。何度も試してみましたが、それを正しくすることはできません。

var result = text.match(regex); 

enter image description here

+0

あなたはあなたのパターンが一致したものを知っていますか? '\ [[(A-Za-z0-9)] + \]'は '['に続けて '('、文字、数字、 ')'の後に続く ']'にマッチします。ここにはキャプチャグループはありません。何を本当にマッチさせたいですか? '[...]'の中の英数字ですか? '/ [([a-z0-9] +)]/ig'と' RegExp#exec'を1つのループで使用してください。アクセス一致[1]の値。 –

+0

'console.log(JSON.stringify(result))'を実行し、結果のイメージをポストするのではなく、結果のテキストを含めることができれば、おそらく最適です... –

答えて

2

あなたはこのようにして作成する部分マッチを防ぐ文字クラスのキャプチャグループの一部を作り、円形や角括弧をmispositioned。

あなたはブラケットの位置を交換する必要があります。

/\[([a-z0-9]+)]/gi 

regex demo以下JSのデモを参照してください。

  • \[ - リテラル[
  • ([a-z0-9]+) - それは外にあるときにそれをエスケープするリテラルの閉じ括弧(不要 - グループ1は、1つまたは複数の英数字
  • ]をキャプチャ:

    パターンは詳細文字クラス)

  • /gi - 大文字と小文字を区別しない一致修飾子([a-z]は、コードでは、各非重複一致)

var re = /\[([a-z0-9]+)]/gi; 
 
var str = '[ProcessName] - [ProcessID]'; 
 
var res = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    res.push(m[1]); 
 
} 
 
console.log(res);

処理、A-Zに一致する、我々はRegExp#execなくString#match後者の理由を使用する必要があり、正規表現を有すると共に使用される場合グローバルモディファイアでは、すべてのサブッチ(取得された部分)が破棄されます(Description at MDN String#matchページを参照)。

+0

グローバルフラグなしで正規表現を使用する必要がある場合は、 'RegExp#exec'と'/\ [([a-z0-9] +)]/gi'正規表現がここにあります1回だけ)、 'String#match'を使用してください。 –

+0

有益な答えをありがとう。 –

1

はすぐに私は疑問を提起した後、私は答えを見つけた...

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g); 
var matches, output = []; 
while (matches = regex.exec(text)) 
{ 
    output.push(matches[1]); 
} 
関連する問題