7
votes

I am attempting to create a pig latin converter which splits the string at its first vowel, and switches the first substring with the second (e.g. dog -> ogd).

The following regex code is working for single vowel strings, however when attempting to translate a word with multiple vowels, it is splitting the string at the last vowel:

string.replace(/(\w+)([aeiou]\w+)/i, '$2$1')

Running this code on the word "meaning" results in "ingmean" (splitting on the 'i'), whereas I am expecting to return "eaningm" (splitting on the 'e')

Thanks!

2
You might want to be specific about the exact output you are trying to get - musefan
@musefan I am hoping to return "eaningm" - jgrune

2 Answers

5
votes

You need to add the lazy (?) operator:

string.replace(/(\w+?)([aeiou]\w+)/i, '$2$1')
5
votes

This should do the trick

/([^aeiou]+)([aeiou])([a-zA-Z]+)/

And use

$2$3$1