2017-10-27 12 views
0

$()の文字列からデータを抽出しようとしています。 私の文字列は、そのJS Regexは括弧内のデータを抽出します

$([email protected]:123)124rt12$([email protected])frg12<>$(rez45) 

のようなものは、基本的に$()内部およびすべての$()の間に何がある可能性が見えます。 しかし、$()の中には$()を入れることはできません。

この

は、私はあなたが試すことができ

var reg = new RegExp('\\$\\(.*(?![\\(])\\'), 'g'); 
var match = reg.exec(mystring); 
+0

_ "私は$()内のデータを抽出しようとしています。文字列から "$()"の中の文字列の一部だけをキャプチャする必要がありますか? – guest271314

答えて

3

を動作しないよう、これまで持っているものである。この1 \\$\\([^(]*\\)

var mystring = "$([email protected]:123)124rt12$([email protected])frg12<>$(rez45)" 
 

 
var reg = new RegExp('\\$\\([^(]*\\)', 'g'); 
 

 
console.log(reg.exec(mystring)); 
 
console.log(reg.exec(mystring)); 
 
console.log(reg.exec(mystring));

あなたはすべての一致を収集するためにmatchを使用することができます文字列の正規表現パターンの:

var mystring = "$([email protected]:123)124rt12$([email protected])frg12<>$(rez45)" 
 

 
var reg = new RegExp('\\$\\([^(]*\\)', 'g'); 
 

 
console.log(mystring.match(reg));

+0

それは動作します、ありがとうございます。 1つの質問では、どのように1つのコールですべての試合をキャッチしますか? – Eric

+0

あなたは男です:)ありがとう – Eric

+0

助けてくれてうれしい! – Psidom

3

)は($内部のすべてのものをキャプチャし、このような怠惰なパターンを使用するには:(?:\$\()(.*?)(?:\))

const regex = /(?:\$\()(.*?)(?:\))/g; 
const str = `\$([email protected]:123)124rt12\$([email protected])frg12<>\$(rez45)`; 
let m; 

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

    // The result can be accessed through the `m`-variable. 
    m.forEach((match, groupIndex) => { 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
    }); 
} 

PS:それは代わりに、非キャプチャグループの正の前後参照を用いることが好ましいだろう、 JavaScriptはLookaheadをサポートしています。

+0

いいえ、唯一のことは、$()を一度も使わずに一度だけマッチを繰り返すことです。 – Eric

+0

$ 0は周囲の$(...)との完全一致で、$ 1はあなたが望むものだけを含んでいます。 – wp78de

0

文字列から$()内のデータを抽出しようとしています。あなたは")"で文字列を分割するRegExp/\)[^$]+|[$()]/.split()を使用することができます

は、"$""$"ない一つまたは複数の文字に続い"("")"文字、空の文字列を持つ配列を返すために.filter()を使用

var mystring = "$([email protected]:123)124rt12$([email protected])frg12<>$(rez45)"; 
 

 
var reg = /\)[^$]+|[$()]/; 
 

 
var res = mystring.split(reg).filter(Boolean); 
 

 
console.log(res);
を削除

関連する問題