是否有一种简单的方法使用javascript更改匹配字符串的情况?
示例
字符串:<li>something</li>
正则表达式:/<([\w]+)[^>]*>.*?<\/\1>/
我想做的是将匹配$ 1替换为所有大写字母(如果可能,在替换内)。我不完全确定$ 1是有效匹配而不是字符串 - '$ 1'.toUpperCase不起作用。
那么我将如何回归<LI>something</li>
?方法,而不是正则表达式。
答案 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() + '>';