如何使用 string.replace() 保留字符大小写?

How to preserve character case using string.replace()?

我正在尝试编写一个函数,将字符串中的所有元音替换为最终用户选择的另一个任意元音。到目前为止,我已经能够编写一个函数来替换所有元音而不考虑大小写,但我希望能够在 replace().

期间保留大小写

这是我现在正在做的一个例子。


var selectedVowel = "a";
var vowels = /[aeiouAEIOU]/gi;

function rep(string){
let newString = string.replace(vowels, selectedVowel);
return newString;
}

rep("FooBar Exe. unIt");
// returns "FaaBar axe. anat"
// Intended output should return "FaaBar Axe. anAt"

我曾尝试使用正则表达式来修改 replace()selectedVowel 的搜索条件,但我不知道如何使用正确的正则表达式字符来实现这一目标。

我也研究过使用 split() 替换单词首字母的方法,但这种方法似乎仅限于字符串的索引,这在函数调用时是未知的.

有什么建议吗?

String.prototype.replace() 用函数代替替换字符串,每次匹配都会调用该函数。

您可以编写一个函数来检查每个匹配项并将其替换为 selectedVowel 原样或大写,具体取决于匹配字符串的大小写。

检查字符是否为 upper/lowercase 的一个小技巧是将其与自身的 upper/lowercased 版本进行比较,如 match === match.toUpperCase().

var selectedVowel = "a";
var vowels = /[aeiouAEIOU]/gi;

function rep(string){
  return string.replace(vowels, match => {
    if (match === match.toUpperCase()) {
      return selectedVowel.toUpperCase()
    }
    return selectedVowel
  });
}

console.log(rep("FooBar Exe. unIt")) //=> "FaaBar Axa. anAt"