8

Is there an easy way to change the case of a matched string with javascript?

Example

String : <li>something</li>

Regex : /<([\w]+)[^>]*>.*?<\/\1>/

And what I'd like to do is replace the match $1 to all capital letters (inside the replace if possible). I'm not entirely sure when $1 is a valid match and not a string -- '$1'.toUpperCase doesn't work.

So how would I go about returning <LI>something</li>? The method, not the regex.

2 Answers 2

17

You can pass the replace method a replacer function. The first argument for which is the whole match, the second will be $1. Thus:

mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){ 
   return a.replace(x,x.toUpperCase()); 
})

although this form saves the extra operation by making an additional capture (should be faster but haven't checked):

mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){ 
   return ('<'+x.toUpperCase()+y); 
})
Sign up to request clarification or add additional context in comments.

Comments

0

easiest is probably to use a regex match and then use .toUpperCase on the match. I modified the regex slightly to add in a second capture group

var str = '<li>something</li>';
var arr = /<([\w]+)([^>]*>.*?<\/)\1>/.exec(str);
str = '<' + arr[1].toUpperCase() + arr[2] + arr[1].toUpperCase() + '>';

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.