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

Convert uppercase characters back to uppercase after case insensitive regex being applied

本文关键字:字符 转换 不区 大小写 正则表达式 应用      更新时间:2023-09-26

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

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 positions包含要转换的字符的位置到大写,wo 我将循环访问更新的文本并替换以前的字符大写。但是我需要为仓位添加偏移量,因为 [5,0] 不正确。

更新:

更新的 var 应该<span style='color:blue' >Test</span> Text而不是

<span style='color:blue' >test</span> Text

这似乎是一种实现解决方案的抽搐方法,还有更优雅的方法吗?

https://plnkr.co/edit/6uO3M8kATQLXvWWVx1Vw?p=preview

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

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

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

var update = "<span style='color:blue' >$&</span>";
                                        ^^

观看演示:

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

$&反向引用提供对与正则表达式模式匹配的整个子字符串的快速访问。无需使用回调或其他技巧。