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

时间:2016-02-10 13:21:10

标签: 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 = 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包含要转换的字符的位置 为了大写,我将遍历更新的文本并替换之前的字符 大写。但是我需要在[5,0]不正确的位置添加偏移量。

更新:

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

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

这似乎是一种实现解决方案的有效方法,是否有更优雅的方式?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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; 

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