【发布时间】:2020-03-23 19:58:27
【问题描述】:
我有一个脚本可以读取文件并通过模式比较字符串,如果它返回 false,它将删除 .txt 文件中的行。
这是我的代码
const readline = require('readline');
const lineReplace = require('line-replace')
const fs = require('fs');
const inputFileName = './outputfinal.txt';
const readInterface = readline.createInterface({
input: fs.createReadStream(inputFileName),
});
let testResults = [];
readInterface.on('line', line => {
testResult = test(line);
console.log(`Test result (line #${testResults.length+1}): `, testResult);
testResults.push({ input: line, testResult } );
if (testResult == false){
console.log(`Line #${testResults.length} will get deleted from this list`);
lineReplace({
file: './outputfinal.txt',
line: testResults.length,
text: '',
addNewLine: false,
callback: onReplace
});
function onReplace({file, line, text, replacedText}) {
};
};
});
// You can do whatever with the test results here.
//readInterface.on('close', () => {
// console.log("Test results:", testResults);
//});
function test(str){
let regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; // email regex
str = str.split(",");
// string should be of length 3 with str[1] number of length 7
if(str && str.length === 3 && Number(str[1]) && str[1] ) {
let temp = str[0].split("-");
// check for 85aecb80-ac00-40e3-813c-5ad62ee93f42 separately.
if(temp && temp.length === 5 && /[a-zA-Z\d]{8}/.test(temp[0]) && /[a-zA-Z\d]{4}/.test(temp[1]) && /[a-zA-Z\d]{4}/.test(temp[2]) && /[a-zA-Z\d]{4}/.test(temp[3]) && /[a-zA-Z\d]{12}/.test(temp[4])){
// email regex
if(regex.test(str[2])) {
return true;
} else {
return false;
}
} else {
return false
}
} else {
return false;
}
}
但不工作,返回错误没有这样的文件或目录,我不认为这是做一个 line remover 脚本的正确方法
【问题讨论】:
-
仅供参考:
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/容易发生灾难性的回溯。无论您在哪里找到此模式,都让他们知道它至少应该是/^\w+([.-]\w+)*@\w+([.-]\w+)*(\.\w{2,3})+$/ -
如果显示没有这样的文件或目录,请检查文件的路径是否正确。此外,createReadStream 可能只允许您读取,而不是写入。
-
请provide your input file 以及您预期输出的示例。
-
另外,不确定这应该做什么: if(str && str.length === 3 && Number(str[1]) && str[1] ) 您是否要检查是否str[1] 是一个数字,还是将其转换为一个数字并检查它是否不为空或未定义?
标签: javascript node.js regex