【问题标题】:Convert uppercase characters back to uppercase after case insensitive regex being applied应用不区分大小写的正则表达式后将大写字符转换回大写
【发布时间】:2016-02-10 13:21:10
【问题描述】:

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

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 应该是 &lt;span style='color:blue' &gt;Test&lt;/span&gt; Text 而不是

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

这似乎是一种复杂的解决方法,有没有更优雅的方法?

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

【问题讨论】:

  • 如果&lt;span style='color:blue' &gt;test&lt;/span&gt; Text 是所需的输出,那么您的代码已经在执行此操作,您面临的问题是什么?
  • @gurvinder372 请查看问题更新,我打错了
  • 这是否意味着我一开始就建议var update = "&lt;span style='color:blue' &gt;$&amp;&lt;/span&gt;"; 时是对的?见this fiddle。
  • @WiktorStribiżew 是的

标签: javascript regex


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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; 

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 2011-04-22
      • 2011-06-21
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多