Как изменить заданную строку на измененную регулярное выражение, используя javascript - PullRequest
0 голосов
/ 29 января 2020

Пример строки:

 2222 
 333333 
 12345 
 111
 123456789
 12345678

Ожидаемый результат:

2@222
333@333
12@345
111
 123@456@789
 12@345@678

т.е. '@' должен быть вставлен в 4-й, 8-й, 12-й и т. Д. c в последней позиции от конца строки.

Я полагаю, что это можно сделать с помощью замены и некоторых других методов в JavaScript.

для проверки выходной строки. Я сделал регулярное выражение:

^(\d{1,3})(\.\d{3})*?$

Ответы [ 3 ]

1 голос
/ 29 января 2020

var test = [
    '111',
    '2222',
    '333333',
    '12345',
    '123456789',
    '1234567890123456'
];
console.log(test.map(function (a) {
  return a.replace(/(?=(?:\B\d{3})+$)/g, '@');
}));
1 голос
/ 29 января 2020

Вы можете сопоставить все цифры. В замену вставьте @ после каждого третьего ди git справа, используя положительный взгляд.

(?=(?:\B\d{3})+$)
  • (?= Положительный взгляд, справа -
    • (?:\B\d{3})+ Повторить 1+ раз без границы слова и 3 цифры
  • $ Подтвердить конец строки
  • ) Закрыть прогноз

Regex demo

const regex = /^\d+$/;
["2222",
  "333333",
  "12345",
  "111",
  "123456789",
  "12345678"
].forEach(s => console.log(
  s.replace(/(?=(?:\B\d{3})+$)/g, "@")
));
1 голос
/ 29 января 2020

Вы можете использовать это регулярное выражение:

/(\d)(\d{3})$/

, оно будет соответствовать и сгруппировать первые di git \d и сгруппировать последние три \d{3}, которые затем будут сгруппированы в их собственную группу. Используя сопоставленные группы, вы можете ссылаться на них в замещающей строке, используя $1 и $2.

См. Пример ниже:

const transform = str => str.replace(/(\d)(\d{3})$/, '$1@$2');

console.log(transform("2222")); // 2@222
console.log(transform("333333")); // 333@333
console.log(transform("12345")); // 12@345
console.log(transform("111")); // 111

Для больших строк размером N вы можете использовать другие методы, такие как .match(), и обратить строку следующим образом:

const reverse = str => Array.from(str).reverse().join('');
const transform = str => {
  return reverse(reverse(str).match(/(\d{1,3})/g).join('@'));
}

console.log(transform("2222")); // 2@222
console.log(transform("333333")); // 333@333
console.log(transform("12345")); // 12@345
console.log(transform("111")); // 111
console.log(transform("123456789")); // 123@456@789
console.log(transform("12345678")); // 12@345@678
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...