Вставка пробела после определенного количества чисел в строке

#javascript #regex

Вопрос:

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

Пример ввода:

 [
   "A12345678",
   "ABC12345678",
   "1234 56 7 8",
   "12 345 67 8",
   "AB12345678BVC",
]
 

Желаемый результат:

 [
   "A123 45678",
   "ABC123 45678",
   "123 45678",
   "123 45678",
   "AB123 45678BVC",
]
 

Я думал, что это может быть решаемо с помощью replaceAll пробелов, чтобы получить непрерывную строку, а затем выполнить a for loop над каждым символом в строке, а затем решить это путем проверки типов символов, чтобы добавить пробел в нужную позицию, но я получаю огромное количество этих массивов из серверной части, и это может закончиться ужаснымпроизводительность таким образом.

Другая идея, которую я получил, — решить это с помощью регулярных выражений, как в этом примере из учебника, но, к сожалению, я не умею писать регулярные выражения. Я был бы очень признателен, если кто-нибудь сможет мне в этом помочь.

Комментарии:

1. пожалуйста, поделитесь тем, что вы пробовали

Ответ №1:

Вы можете использовать String.replace() along with Array.map() для добавления требуемого пробела. Прежде всего, мы удаляем все пробелы из каждой строки, затем добавляем пробел в требуемую позицию.

 const input = [
   "A12345678",
   "ABC12345678",
   "1234 56 7 8",
   "12 345 67 8",
   "AB12345678BVC",
]

const result = input.map(v => v.replace(/s/g,'').replace(/(d{3})/, '$1 '));
console.log(result) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Ответ №2:

Использование

 const texts = [
  "A12345678",
  "ABC12345678",
  "1234 56 7 8",
  "12 345 67 8",
  "AB12345678BVC"
]
for (const text of texts) {
    console.log(text, '->', text.replace(/s /g,'').replace(/d{3}(?!$)/, '$amp; '));
} 

Т.е.

  • Сначала удалите пробелы, затем
  • Добавьте пробел после первых 3 цифр, если эти цифры не находятся в конце строки.