Заменить середину строки с учетом диапазона - PullRequest
0 голосов
/ 07 мая 2019

Предыдущий вопрос:

Как заменить интервальный символ в строке:

Например, Apple на A *** e

Обновление:

Нужно получить позиции 0-4 и -4 (реверс)

var transaction = '1234567890987651907';
console.log('1234****1907');

Решение

var str = "01340946380001281972";
str.replace(/^(\d{0,4})(\d{4})(.*)/gi,"$1 **** $2");

Ответы [ 4 ]

0 голосов
/ 07 мая 2019

Я думаю, вы имели в виду это

function maskIt(str, keep) {
  var len = str.length,
    re = new RegExp("(.{" + keep + "})(.{" + (len - keep * 2) + "})(.{" + keep + "})", "g")
  console.log(re)
  return str.replace(re, function(match, a, b, c) {
    return a + ("" + b).replace(/./g, "*") + c
  });
}
console.log(
  maskIt("1234567890", 4),
  maskIt("Apple", 1)
)

В качестве прототипа:

String.prototype.maskIt = function(keep) { // don't use arrow or lose "this"
  const re = new RegExp("(.{" + keep + "})(.{" + (this.length - keep * 2) + "})(.{" + keep + "})", "g");
  return this.replace(re, (match, a, b, c) => a + ("" + b).replace(/./g, "*") + c);
}
console.log(
  "1234567890".maskIt(4),
  "Apple".maskIt(1)
)
0 голосов
/ 07 мая 2019

Просто замените средние символы:

const str = "Apple";
const output = `${str[0]}${"*".repeat(str.length - 2)}${[...str].pop()}`;
console.log(output);
0 голосов
/ 07 мая 2019
var str = "01340946380001281972";
str.replace(/^(\d{0,4})(\d{4})(.*)/gi,"$1 **** $2");
0 голосов
/ 07 мая 2019

Вот решение с использованием функций базовых строк:

var input = "Apple";
var input_masked = input.substring(0, 1) + Array(input.length - 1).join("*") +
    input.substring(input.length-1);
console.log(input_masked);

Этот подход заключается в том, чтобы расположить средние символы, маскированные как *, между первым и последним символом ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...