替换字符串开头和结尾的几个字符

时间:2019-01-28 09:26:23

标签: javascript

用*字符替换前几个字符,我能够解决str1的情况。我该如何解决剩下的一个。现在,我能够掩盖最后4个字符。

我该如何屏蔽前3或4个字符。 ?正则表达式模式有什么问题

var str1 = "1234567890123456";
str1 = str1.replace(/\d(?=\d{4})/g, "*");

console.log(str1)

var str2 = "123-456-789-101112"
str2 = str2.replace(/\d(?=\d{4})/g, "*");

console.log(str2) // expected ***-***-***-**1112

var str3 = "abc:def:12324-12356"
str3 = str3.replace(/\d(?=\d{4})/g, "*");

console.log(str3) // expected ***:***:*****-*2356

现在它仅掩盖了最后四个字符,我又如何像前面一样掩盖四个字符

1234567890123456 => 1234********3456
123-456-789-101112 => 123-4**-***-**1112
abc:def:12324-12356 => abc:d**:*****-*2356

1 个答案:

答案 0 :(得分:2)

一种选择是提前查找非空格字符,后跟4位数字。由于您也想替换字母字符,因此使用字符集[a-z\d]而不是\d

const repl = str => console.log(str.replace(/[a-z\d](?=\S*\d{4})/g, "*"));

repl("1234567890123456");
repl("123-456-789-101112");
repl("abc:def:12324-12356");

如果您还希望保留前4个字母数字字符,则要复杂得多-匹配并捕获前4个字符(可能会用分隔符穿插),然后捕获中间的字符,然后捕获后4个数字。使用替换函数将第二组中的所有非分隔符替换为*

const repl = str => console.log(str.replace(
  /((?:[a-z\d][-@.:]?){4})([-@:.a-z\d]+)((?:[a-z\d][-@.:]?){4})/ig,
  (_, g1, g2, g3) => g1 + g2.replace(/[a-z\d]/ig, '*') + g3
));

repl("1234567890123456");
repl("123-456-789-101112");
repl("abc:def:12324-12356");
repl("test@test.com");