【问题标题】:RegExp replace all letter but not first and lastRegExp 替换所有字母,但不是第一个和最后一个
【发布时间】:2018-07-11 07:42:01
【问题描述】:

我必须替换 **** 上的所有姓名字母。 示例:

珍妮弗 -> J****r

我试试$(this).text( $(this).text().replace(/([^\w])\//g, "*"))

另外,如果名字是 Ron -> R****n

【问题讨论】:

  • 如果你不关心字母的数量,并且总是想用四个* 替换中间字符,为什么要使用正则表达式?
  • (我的错,this question 不是一个好的欺骗目标。)
  • 没有更多细节,看来.replace(/(?!^)\w(?!$)/g, "*") 可以。
  • 'Jeniffer'.replace(/^(\w).*(\w)$/, '$1****$2')
  • @WiktorStribiżew - OP 想要四个 *,无论名称长度如何。 (至少,我是这样读“Jeniffer -> J****r”和“Ron -> R****n”的。)

标签: javascript jquery regex


【解决方案1】:

可以为此使用正则表达式,通过捕获捕获组中的第一个和最后一个字母并忽略它们之间的所有字母,然后在替换中使用捕获组:

var updated = name.replace(/^(.).*(.)$/, "$1****$2");

现场示例:

function obscure(name) {
  return name.replace(/^(.).*(.)$/, "$1****$2");
}
function test(name) {
  console.log(name, "=>", obscure(name));
}
test("Ron");
test("Jeniffer");

但如果没有:

var updated = name[0] + "****" + name[name.length - 1];

现场示例:

function obscure(name) {
  return name[0] + "****" + name[name.length - 1];;
}
function test(name) {
  console.log(name, "=>", obscure(name));
}
test("Ron");
test("Jeniffer");

这两个都假设名称至少有两个字符长。 I pity the fool谁在T先生的姓氏上试试这个。

【讨论】:

    【解决方案2】:

    由于您需要在每个条件上使用四个星号,您可以创建一个可重用的函数来为您创建此格式:

    function replace(str){
      var firstChar = str.charAt(0);
      var lastChar = str.charAt(str.length-1);
      return firstChar + '****' + lastChar;
    }
    var str = 'Jeniffer';
    console.log(replace(str));
    str = 'America';
    console.log(replace(str))

    【讨论】:

      【解决方案3】:

      看来您正在寻找正则表达式环视

      正则表达式:(?<=\w)(\w+)(?=\w) - 第 1 组匹配跟随一个字符并且跟随另一个字符的所有字符。

      测试:https://regex101.com/r/PPeEqx/2/

      更多信息:https://www.regular-expressions.info/lookaround.html

      【讨论】:

        【解决方案4】:

        查找第一个和最后一个字符并将**** 附加到第一个字符并添加最后一个:

        const firstName = 'Jeniffer';
        
        const result = firstName.match(/^.|.$/gi).reduce((s, c, i) => `${s}${!i ? `${c}****` : c }`, '');
        
        console.log(result);
        

        【讨论】:

          猜你喜欢
          • 2017-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 1970-01-01
          • 2017-01-25
          • 2022-11-04
          • 1970-01-01
          相关资源
          最近更新 更多