Как открыть и изменить файл RTF, используя .replace и regex, а затем написать построчно с Nodejs и удалить «упрямый» двойной \\? - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю с node.js и обрабатываю некоторые файлы RTF (которые начинались как PDF-файлы). Конкретная проблема, с которой я столкнулся, связана с открытием файлов RTF, удалением некоторых «нежелательных» частей и последующей записью в несколько файлов.

Я пытаюсь удалить лишнюю разметку, такую ​​как | - и другие символы, которые использовались для форматирования документа. Я хотел бы текст (который происходит на японском языке), ничего больше.

Вот проблема, с которой я столкнулся. В исходном файле RTF выглядит следующим образом (просто образец):

\f2\fs24 \
\pard\pardeftab720\sl235\slmult1\partightenfactor0

\f0\fs20 \cf0 \'a1\'a1
\f2\fs24 \
\pard\pardeftab720\sl-2\partightenfactor0

\f1 \cf0 \
\pard\pardeftab720\ri5880\sl253\slmult1\partightenfactor0

Я могу удалить нежелательных персонажей прямо сейчас. Однако при записи в новый файл возникает одна очень специфическая проблема:

\f2\fs24 
\\pard\pardeftab720\sl235\slmult1\partightenfactor0\f0\fs20 
\cf0 \'a1\'a1\f2\fs24 \\pard\pardeftab720\sl-2\partightenfactor0\f1 
\cf0 
\\pard\pardeftab720\ri5880\sl253\slmult1\partightenfactor0\f0\fs19 
\cf0 

Проблема с

\\pard

части. Двойное «\\» означает, что слово «pard» отображается в файле RTF в качестве вывода. Я пытался использовать .replace с регулярным выражением, но проблема, кажется, с фактическим написанием. Независимо от того, что я делаю, когда он записывает в файл, я получаю «\ pard» вместо «\ pard».

Вот код, который у меня есть на данный момент:

const fs = require('fs');
const readline = require('readline');
let rtf = './sample.rtf';


let regex = /\?\\\'a3\\\'ad|\\\'a3\\\'ad|\?\\\'a9\\\'d3|\\\'a9\\\'d3|\?\\u9487|\\u9487|\\uc0\\u9491|\?\?\\u9475|\?\\u9473|\\u9473|\?\\u9474|\\u9474|\?\\u9475|\\u9475|\?\\u9472|\\u9472|\\\'a9\\\'cc|\\\'a9\\\'d0|\\\'a9\\\'cf|\\\'a9\\\'e3|\\\'a9\\'c7|\\'a9\\\'c4|\?\\u9473|\\u9473|\?\\u9487|\\u9487|\\\'a9\\\'c4\\\'a9\\\'e0|\\uc0\\u9491|\\\'a9\\\'e0|\\\'a9\\\'c0/gi;



let readStream = fs.createReadStream('sample.rtf');
let writeStream = fs.createWriteStream(`${rtf}-clean.rtf`);

const rl = readline.createInterface({
  input: readStream,
  output: writeStream,
  crlfDelay: Infinity
});

rl.on("line", ((line) => {
  line = line.replace(regex, "");
  writeStream.write(line);
}));

rl.on("close", (() => {
  console.log('done');
})) 

Если у кого-то есть какие-либо предложения или идеи, я был бы признателен.

1 Ответ

0 голосов
/ 03 ноября 2018

Ответ короткий, вы не должны удваивать escape, когда создаете регулярное выражение literal (шаблон регулярного выражения, который начинается и заканчивается косой чертой '/').

Так что уберите все эти двойные побеги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...