RegExp替换所有字母,但不替换首尾

时间:2018-07-11 07:42:02

标签: javascript jquery regex

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

Jeniffer-> J **** r

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

如果名字是罗恩-> R **** n

4 个答案:

答案 0 :(得分:4)

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

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先生的姓氏来尝试。

答案 1 :(得分: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))

答案 2 :(得分:0)

您似乎正在寻找正则表达式环顾

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

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

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

答案 3 :(得分:0)

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

const firstName = 'Jeniffer';

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

console.log(result);