2017-09-30 14 views
1

JSと正しく動作することができるすべてのJediのご挨拶、残念ながらできません。regex Javascriptでグループをキャプチャするには?

私は「M10 M20 M30 xm40のそれぞれの文字列のすべての試合で反復処理したい、xm40除いて、数字を抽出し、10、20、30:

' m10 m20 m30 xm40'.match(/\s+m(\d+)/g) 

が、これは私が得るものですクロムコンソールで:

' m10 m20 m30 xm40'.match(/\s+m(\d+)/g) 
(3) [" m10", " m20", " m30"] 

「m」もキャプチャされていますか?私は理解できません。私は成功せずに多くの組み合わせを試みました。何かご意見は?

Bye!

答えて

2

使用RegExp.exec()は機能:

const regex = /\sm(\d+)/g; 
 
const str = ' m10 m20 m30 xm40'; 
 
let result = []; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    // This is necessary to avoid infinite loops with zero-width matches 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    }   
 
    result.push(+m[1]); 
 
} 
 

 
console.log(result);

+0

Thxを、私は基より反復のために理由を説明することなく、ユーザにregexp.execに優れているという一行を発見しました。あなたのコードだけが正しく動作しました! https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec JS xDが嫌い – MaikoID

+0

@MaikoID、ようこそ – RomanPerekhrest

1

ちょうどそれらの数字を得るための別の方法は/\sm\d+/g最初に照合し、次にそれらの結果の上にマッピングの結果を返すと数字を抽出することであろう。

var m = str.match(/\sm\d+/g).map(el => el.match(/\d+/)[0]); 

DEMO

関連する問題