最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

regex - Javascript replace() with case-change - Stack Overflow

programmeradmin3浏览0评论

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.

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.

Share Improve this question asked Jun 11, 2009 at 15:06 Ian ElliottIan Elliott 7,6865 gold badges36 silver badges42 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 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); 
})

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() + '>';
发布评论

评论列表(0)

  1. 暂无评论