Javascript replace()与大小写更改

时间:2009-06-11 15:06:50

标签: javascript regex

是否有一种简单的方法使用javascript更改匹配字符串的情况?

示例

字符串:<li>something</li>

正则表达式:/<([\w]+)[^>]*>.*?<\/\1>/

我想做的是将匹配$ 1替换为所有大写字母(如果可能,在替换内)。我不完全确定$ 1是有效匹配而不是字符串 - '$ 1'.toUpperCase不起作用。

那么我将如何回归<LI>something</li>?方法,而不是正则表达式。

2 个答案:

答案 0 :(得分:15)

您可以将replace方法传递给replacer函数。第一个参数是整个匹配,第二个参数是1美元。因此:

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

虽然这种形式通过进行额外的捕获来保存额外的操作(应该更快但没有检查):

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

答案 1 :(得分:0)

最简单的可能是使用正则表达式匹配,然后在匹配时使用.toUpperCase。我稍微修改了正则表达式以添加第二个捕获组

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