2016-05-26 10 views
0

文字列内のすべての%{string}シーケンスをキャプチャする必要があります。 JSでregex101.com(https://regex101.com/r/aB2xL5/1を)上の文字列Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}で正常に動作します /[^%]*(%{[^}]+})?/g、 が、間違った:: var a='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'.match(/[^%]*(%{[^}]+})?/g);
console.log(a); //['Lorem %{ipsum}', ' dolor %{sit}', ' amet adipiscing aenean %{consectetuer}', '']
私が間違っているのは何が正規表現を作成しています ?私は必要なものJavaScriptでの不規則なRegExpの動作

Input string: 'abc %{def} ghi %{jkl}' Output array: ['%{def}','%{jkl}']

+1

最初のキャプチャグループにアクセスする必要があります – rock321987

+0

文字列 "abc%{def} ghi%{jkl}"から配列(['%{def}'、 '%{jkl}')を取得する必要があります –

+2

' input.match(/%\ {[^}] + \}/g); ' – Thomas

答えて

0

としても、regex101に、あなたが必要とする以上のものを含んで、マッチ全体にアクセスするのではなく、試合の最初のグループにアクセスしない、コメントで述べています。

、そうする代わりにString.prototype.matchRegex.prototype.execを使用するには:

var regex=/[^%]*(%{[^}]+})?/g; 
var data='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'; 
var result=[]; 
var match; 
while (match = regex.exec(data)) { 
    result.push(match[1]); // match the first group of the result 
} 

編集を:私はこのソリューションよりもはるかに優れているトーマスのコメントを、見ました。私は実際にあなたの問題を解決し、グループをキャプチャする方法を説明しているので、ここでそれを残しますが、彼の正規表現を使用する必要があります。

関連する問題