2016-07-08 4 views
2

は私が数字のみ大文字が含まれていないトークンのみを抽出したい以下の文字列グループを繰り返しキャプチャするには?

Bimkingo Clasico Prom 135g LON 49835 Gansito ME 5p 250g MTA MLA 49860 Wonder 

があるとします。 \b(([a-zA-Z]+)+)\b

出力は、これが動作していないよう

Bimkingo Clasico Prom Gansito Wonder 

でなければなりません。

+1

あなたは出力が指定した文字列のためになることを期待するもの投稿してください。 –

+2

構文ハイライトはあなたが望む言葉を認識しているようです。 –

+0

(([a-zA-Z] +)+)は奇妙に見えますが、あなたは(a-zA-Z)+を意味していますか? –

答えて

1

予想通り(\b[a-zA-Z]+[a-z]+\b)正規表現は、OPのポストと他方のエッジの場合には出力、例えば、動作するはず次

var string = 'Bimkingo Clasico Prom 135g LON 49835 Gansito ME 5p 250g MTA MLA 49860 Wonder'; 
 
var regexp = /(\b[a-zA-Z]+[a-z]+\b)+/g; 
 
var matches = string.match(regexp); 
 
var output = "Bimkingo Clasico Prom Gansito Wonder"; 
 
console.log('Matches test output provided by OP "' + output + '":'); 
 
console.log(output === matches.join(' '), '\n'); 
 
console.log(''); // new line 
 

 
// Cases not contained in OP's example output string... 
 
var string = 'mArceLino marcelino'; 
 
console.log('Also matches all lowercase and uppercase mid word "' + string + '":', '\n'); 
 
var matches = string.match(regexp); 
 
console.log(matches.length === 2); 
 
console.log(''); // new line 
 

 
var string = 'MARCEL1N0 MARCELINO11'; 
 
console.log('Excludes all uppercase with number mix "' + string + '":'); 
 
var matches = string.match(regexp); 
 
console.log(matches === null);

受け入れ答えによって"krzyk"は投稿された出力OPにマッチしますが、数字が含まれていないトークン、または大文字のみを含むトークンのみを抽出します。OPの出力例では表現されていないエッジケースの「」です。上記のコードスニペットを実行して、問題のより良い表現をしてください。

正規表現の説明:

(--> // start capture 
    \b --> // match start of word 
    [a-zA-Z]+ --> // match one or more lowercase and uppercase letters 
    [a-z]+ --> // match one or more lowercase only 
    \b --> // match end of word 
) --> // end capture 
1

用途:

(\b[A-Z]?[a-z]+\b)+ 

そして、あなたの正規表現ライブラリーからすべてのグループを取得する(単一のグループにそれを与えたする方法がないように)スペースでそれらを結合。

テストケース:https://regex101.com/r/hY2fM8/1

+0

ああ、キーは '' '' ''グローバルオプションですか? – tnabdb

+0

は驚異的です!ありがとうございました! – tnabdb

+0

どうすれば正規表現でgオプションを作成できますか? – tnabdb

関連する問題