Задать вопрос
@spoT1

Можно ли через регулярные выражения вставить в текст символ?

Пример:
let number = 381724914491
И с помощью регулярных выражений сделать так:
381-72-491-44-91
  • Вопрос задан
  • 268 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Регулярные выражения не нужны:

const insert = (str, substr, ...indices) => [ 0 ]
  .concat(indices)
  .filter(n => 0 <= n && n <= str.length)
  .sort((a, b) => a - b)
  .map((n, i, a) => str.slice(n, a[i + 1]))
  .join(substr);

// или

const insert = (str, substr, ...indices) => indices
  .sort((a, b) => b - a)
  .reduce((acc, n) => (
    0 <= n && n <= str.length && acc.splice(n, 0, substr),
    acc
  ), [...str])
  .join('');

// или

const insert = (str, substr, ...indices) =>
  ''.concat(...Array.from(
    { length: -~str.length },
    function(_, i) {
      return substr.repeat(this[i] ?? 0) + str.charAt(i);
    },
    indices.reduce((acc, n) => (acc[n] = -~acc[n], acc), {})
  ));

Но, конечно, можно и с ними:

const insert = (str, substr, ...indices) => indices
  .filter(n => 0 <= n && n <= str.length)
  .sort((a, b) => a - b)
  .reduce((acc, n, i) =>
    acc.replace(RegExp(`(?<=^.{${n + i * substr.length}})`), substr)
  , str);

Как использовать:

// ваш случай
const str = insert(`${number}`, '-', 3, 5, 8, 10);

// вставлять можно больше одного символа
insert('abc', ' --> ', 1, 2) // 'a --> b --> c'

// можно по одному индексу несколько раз делать вставку
insert('abc', '~', 0, 0, 0) // '~~~abc'

// за границы строки вставка не выполняется,
// за исключением позиции сразу же после конца строки
insert('abc', '!', -1, 3, 4) // 'abc!'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
RAFAILgaley
@RAFAILgaley
используй метод строки slice()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы