Question

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!

Was it helpful?

Solution 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

:)

OTHER TIPS

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]+)\}/)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top