替换文字但保留案例

ign*_*aga 16 javascript

我有一组我需要替换的字符串,但我需要保留字母的大小写.输入字和输出字的长度相同.

例如,如果我需要用"qwer"替换"abcd",那么应该发生以下情况:

"AbcD" translates to "QweR"
"abCd" translates to "qwEr"
Run Code Online (Sandbox Code Playgroud)

等等.

现在我正在使用JavaScript replace,但大写字母在翻译时丢失了.

r = new RegExp( "(" + 'asdf' + ")" , 'gi' );
"oooAsdFoooo".replace(r, "qwer");
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Web*_*ver 13

我将把这个留在这里供参考。

场景:项目列表上不区分大小写的搜索框,字符串的部分匹配应突出显示,但保持原始大小写。

highlight() {
  const re = new RegExp(this.searchValue, 'gi'); // global, insensitive
  const newText = name.replace(re, `<b>$&</b>`);
  return newText;
}
Run Code Online (Sandbox Code Playgroud)

$& 是大小写匹配的文本


Ry-*_*Ry- 7

这是一个帮手:

function matchCase(text, pattern) {
    var result = '';

    for(var i = 0; i < text.length; i++) {
        var c = text.charAt(i);
        var p = pattern.charCodeAt(i);

        if(p >= 65 && p < 65 + 26) {
            result += c.toUpperCase();
        } else {
            result += c.toLowerCase();
        }
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以:

"oooAsdFoooo".replace(r, function(match) {
    return matchCase("qwer", match);
});
Run Code Online (Sandbox Code Playgroud)

  • @Tomalak:如果有必要,将`p> = 65 && p <65 + 26`更改为`UPPERCASE.test(p)`,将`charCodeAt`更改为`charAt`,并定义`var UPPERCASE =/[whateverletters] /; `. (2认同)