Javascript 应用不区分大小写的正则表达式后,将大写字符转换回大写

Javascript 应用不区分大小写的正则表达式后,将大写字符转换回大写,javascript,regex,Javascript,Regex,在这里,尝试在正则表达式匹配后将大写字符转换回大写将删除大写字符: var text = 'Test Text'; var stringToStyle = 'test'; var update = "<span style='color:blue' >" + stringToStyle + "</span>"; var regexp = new RegExp(stringToStyle, 'gi'); var updated = te

在这里,尝试在正则表达式匹配后将大写字符转换回大写将删除大写字符:

var text = 'Test Text';
var stringToStyle = 'test';                   
var update = "<span style='color:blue' >" + stringToStyle + "</span>";
var regexp = new RegExp(stringToStyle, 'gi');
var updated = text.replace(regexp, update);

function replaceAt(text , index, character) {
    return text.substr(0, index) + character + text.substr(index+character.length);
}

function getPositionsOfUppercaseChars(text) {
   var p = [];

   var i = text.length;
   while (i--) {
   if(text[i] == text[i].toUpperCase() && text[i].trim() != ''){
     p.push(i)
   }
}
return p;
}

console.log(updated)
var positions = getPositionsOfUppercaseChars(text)
console.log(positions)
这似乎是一种复杂的解决方法,有没有更优雅的方法


回答你的问题,是的-你会很高兴知道有一种更优雅的方式-

var updated = text.replace(regexp, function style(match) { return "<span style='color:blue' >" + match + "</span>"; });
var updated=text.replace(regexp,函数样式(match){return”“+match+”“;});

在替换中使用找到的匹配值的最优雅方式是在替换模式中使用反向引用:

var update = "<span style='color:blue' >$&</span>";
                                        ^^
var update=“$&”;
^^
请参见演示:

var text='testtext';
变量stringToStyle=‘测试’;
var update=“$&”;
var regexp=new regexp(stringToStyle,'gi');
var updated=text.replace(regexp,update);

document.body.innerHTML=已更新
如果
测试文本
是所需的输出,那么您的代码已经在执行了,您面临的问题是什么?@gurvinder372请查看问题更新,我输入了一个错误,这是否意味着我在开始时建议
var update=“$&”?请参阅。@WiktorStribiżew yes
var update = "<span style='color:blue' >$&</span>";
                                        ^^