Pregunta

I need this string:

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

I need to know using Regex how much distinct ${ANY_THING} exists. In example above i expect 3: ${name}, ${other}, ${feel}

I'm trying it:

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

But the output is wrong :(

Thanks!

¿Fue útil?

Solución 2

I find this solution at #regex IRC Channel by farn user:

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

output:

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

and

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

output:

3

:)

Otros consejos

I need to know using Regex how much distinct ${ANY_THING} exists

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;

The code above would return 3, as that's how many distinct items are in the x string.

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

PS: It's not possible to do it with regular expression only. You need to filter duplicates using the .filter() solution or some other similar

To match the syntax you want you need this:

x.match(/\$\{([a-zA-Z]+)\}/)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top