I ran into a problem recently where I needed to perform a regex replace on a string and also manipulate the string captured in a capture group at the same time. What I discovered is that its valid to pass a function as the second argument to the replace function which gets passed the capture groups as arguments 1+
So here’s my code to capture a person’s name and escape it.
story = story.replace(person\.go\?ID=\d+"\s*[^>]*>([^(<)]+)<\/a>/g,function() { return 'person.go?ID='+escape(arguments[1].replace(/\./g,''))+'">'+arguments[1]+''; });