Как я могу добавить пробел в массив с помощью регулярных выражений - PullRequest
1 голос
/ 28 февраля 2020

У меня есть файл, который выводит данные в неправильном формате. Я пытаюсь использовать Javascript для исправления форматирования файла. Чтобы это работало, все, что мне нужно сделать, это добавить пробел между числами и A.

Проблема в том, что я не знаю, какими будут эти числа.

Пример вывода из файла следующий:

NAME 12345A JAMES
NAME 12345A JAMES
NAME 12345A JAMES
NAME 12345A JAMES

желаемый вывод:

NAME 12345 A JAMES
NAME 12345 A JAMES
NAME 12345 A JAMES
NAME 12345 A JAMES

Я не могу использовать indexOf() с регулярным выражением, поэтому я попытался сначала преобразовать данные в строку, а затем в массив. Я был в состоянии match каждое вхождение регулярного выражения, но когда я пытаюсь splice в моем пространстве, это не сработает. похоже, ему не нравится использовать match.index в качестве индекса. Кто-нибудь может увидеть, где я иду не так?

const fs = require('fs');

fs.readFile('fileName.txt', (err, data) => { 
    let regEx = /NAME \d\d\d\d\d/g;
    let convertToArray = data.toString().split("   ");
    console.log(convertToArray);

    while ((match = regEx.exec(convertToArray)) != null) {
        console.log(match.index);
    };

    let addSpace = convertToArray.splice(match.index, 0, ' ');
    console.log(addSpace);

});

1 Ответ

2 голосов
/ 28 февраля 2020

Вы можете использовать .replace непосредственно для данных:

data.replace(/NAME \d+(?![ \d])/g, '$& ')

См. regex demo .

Подробности

  • NAME - подстрока
  • - пробел
  • \d+ - 1+ цифр
  • (?![ \d]) - сразу не следует с пробелом или другим ди git.

$& в шаблоне замены строки относится ко всему значению совпадения.

Для обработки любого пробела замените буквенное пространство с \s в шаблоне.

...