Comment faire pour String.match () distincte $ {SOME_TEXT} à l'aide de Regex

J'ai besoin de cette chaîne:

var x = 'Hi ${name}! How are you? ${name}, you are old! ${name} share with ${other} how do u ${feel}!' 

Je dois savoir utiliser Regex combien distinct {$ ANY_THING} existe. Dans l'exemple ci-dessus, j'attends 3: $ {name}, $ {other}, $ {feel}

Je l'essaie:

 x.match(\${([a-zA-Z])) 

Mais la sortie est mauvaise 🙁

Merci!

Je dois savoir utiliser Regex combien distinct $ {ANY_THING} existe

 x.match(/\$\{[^\}]+\}/g) .sort() .filter(function(element, index, array) { return index == array.indexOf(element); }) // this .filter() filters out the duplicates (since JS lacks of built in // unique filtering functions .length; 

Le code ci-dessus renverrait 3 , car c'est le nombre d'éléments distincts dans la chaîne x .

JSFiddle: http://jsfiddle.net/cae6P/

PS: Il n'est pas possible de le faire avec une expression régulière seulement. Vous devez filtrer les doublons à l'aide de la solution .filter() ou d'autres similaires

Je trouve cette solution à #regex IRC Channel par farn user:

 x.match(/\$\{([^\}]+)\}(?![\S\s]*\$\{\1\})/g); 

sortie:

 ['${name}', '${other}', '${feel}'] 

et

 x.match(/\$\{([^\}]+)\}(?![\S\s]*\$\{\1\})/g).length; 

sortie:

 3 

🙂

Pour faire correspondre la syntaxe souhaitée, vous avez besoin de ceci:

 x.match(/\$\{([a-zA-Z]+)\}/)