Выполните несколько фильтров Regex для текстового содержимого в Node.js с Javascript - PullRequest
1 голос
/ 19 марта 2019

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

Первоначально я пытался использовать один из найденных мною узлов Node, который мог это сделать,звонил https://www.npmjs.com/package/clean-text-utils - Однако, похоже, он нацелен на Typescript, и я не смог заставить его работать с Node 8.10.Поэтому я покопался в node_module, чтобы найти соответствующий JS, чтобы попытаться заменить недопустимые символы с помощью функции.

Как я могу запустить все фильтры регулярных выражений для переменной myTXT?На данный момент он просто выводит текст с неверными апострофами, отличными от ASCII.

var myTXT;

...

const readFile = util.promisify(fs.readFile);
await readFile('/tmp/' + myfile, 'utf8')
    .then((text) => {
        console.log('Output contents: ', text);
        myTXT = text;
    })
    .catch((err) => {
        console.log('Error', err);
    });

var myTXT = function (myTXT) {
    var s = text
        .replace(/[‘’\u2018\u2019\u201A]/g, '\'')
        .replace(/[“”\u201C\u201D\u201E]/g, '"')
        .replace(/\u2026/g, '...')
        .replace(/[\u2013\u2014]/g, '-');
    return s.trim();
};

console.log('ReplaceSmartChars is', myTXT);

Вот пример проблем с апострофами, вызванных копированием текста с веб-страницы и вставкой в ​​файл .txt.также отображается в PasteBin:

Resilience is what happens when we’re able to move forward even when things don’t fit together the way we expect.

And tolerances are an engineer’s measurement of how well the parts meet spec. (The word ‘precision’ comes to mind). A 2018 Lexus is better than 1968 Camaro because every single part in the car fits together dramatically better. The tolerances are more narrow now.

https://pastebin.com/uJ7GAKk4

Скопирован из следующего URL и вставлен в Блокнот и сохранен

https://seths.blog/storyoftheweek/

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

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

const readFile = util.promisify(fs.readFile);

function replaceChars(text) {
   return text
        .replace(/[‘’\u2018\u2019\u201A]/g, '\'')
        .replace(/[“”\u201C\u201D\u201E]/g, '"')
        .replace(/\u2026/g, '...')
        .replace(/[\u2013\u2014]/g, '-')
        .trim();
}

const myTXT = await readFile('/tmp/' + myfile, 'utf8')
    .then((text) => {
        console.log('Output contents: ', text);
        return replaceChars(text);
    })
    .catch((err) => {
        console.log('Error', err);
    });

console.log('ReplaceSmartChars is', myTXT);
0 голосов
/ 19 марта 2019

Я не знал clean-text-utils , поэтому я попробовал модуль, и он прекрасно работает:

const fs = require('fs-then-native')
const cleanTextUtils = require('clean-text-utils');

async function clean(file) {
  let txt = await fs.readFile(file, 'utf8');
  txt = cleanTextUtils.replace.exoticChars(txt);
  return txt;
}

clean('input.txt')
  .then(result => {
    console.log(result);
  });
0 голосов
/ 19 марта 2019

Вы должны поместить свой console в async лямбду. И переименуйте myTXT функцию в нечто отличное от переменной myTXT.

Попробуйте код ниже.

const fs = require('fs');

var myTXT;

(async () => {
    const readFile = util.promisify(fs.readFile);
    await readFile('/tmp/' + myfile, 'utf8')
      .then((text) => {
          console.log('Output contents: ', text);
          myTXT = text;
      })
      .catch((err) => {
          console.log('Error', err);
      });

    var replace = function (text) {
      var s = text
          .replace(/[‘’\u2018\u2019\u201A]/g, '\'')
          .replace(/[“”\u201C\u201D\u201E]/g, '"')
          .replace(/\u2026/g, '...')
          .replace(/[\u2013\u2014]/g, '-');
      return s.trim();
    };

  console.log('ReplaceSmartChars is', replace(myTXT));
})()
...