Roman Kh
Roman Kh

Reputation: 117

RegExp replace all letter but not first and last

I have to replace all letters of name on ****. Example:

Jeniffer -> J****r

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

Also, if name is Ron -> R****n

Upvotes: 0

Views: 1122

Answers (4)

T.J. Crowder
T.J. Crowder

Reputation: 1074238

You can use a regular expression for this, by capturing the first and last letters in a capture group and ignoring all letters between them, then using the capture groups in the replacement:

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

Live Example:

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

But it's perhaps easier without:

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

Live Example:

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

Both of those do assume the names will be at least two characters long. I pity the fool who tries this on Mr. T's surname.

Upvotes: 4

Leonid Pyrlia
Leonid Pyrlia

Reputation: 1712

Find first and last chars and append **** to the first one and add the last one:

const firstName = 'Jeniffer';

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

console.log(result);

Upvotes: 0

Igor Korzhanov
Igor Korzhanov

Reputation: 216

Appears that you're looking for regex lookaround

Regex: (?<=\w)(\w+)(?=\w) - group 1 matches all characters which follow one character and followed by another one.

Tests: https://regex101.com/r/PPeEqx/2/

More Info: https://www.regular-expressions.info/lookaround.html

Upvotes: 0

Ankit Agarwal
Ankit Agarwal

Reputation: 30739

Since, you need to have four asterisk on each condition, you can create a reusable function that will create this format for you:

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))

Upvotes: 2

Related Questions