使用 node.js 清理来自标准输入的流
Sanitize stream from stdin using node.js
我有这个脚本:
let stdin = '';
process.stdin
.setEncoding('utf8')
.resume()
.on('data', d => {
stdin+= d;
});
const regexs = [
[/(?=.*[^a-zA-Z])[0-9a-zA-Z]{7,300}/g, function replacer(match, p1, p2, p3, offset, string) {
return match.slice(0,2) + 'xxxxx' + match.slice(6);
}]
];
process.stdin.once('end', end => {
for(let r of regexs){
stdin = stdin.replace(r[0], r[1]);
}
console.log(stdin);
});
我是这样使用它的:
echo "ageoageag ageagoie ag77eage" | node sanitize-stdin.js
我明白了:
agxxxxxeag agxxxxxie agxxxxxge
但我真的只想替换长度为 6-300 的字符串(如果其中包含数字)。所以我正在寻找的输出是:
ageoageag ageagoie agxxxxxge
任何人都知道如何仅在其中至少有一个数字的情况下替换该字符串?
如果你的脚本被修改了,这个修改怎么样?
在您的脚本中,replacer()
函数中的 match
是拆分后的字符串。当输入 "ageoageag ageagoie ag77eage"
时,ageoageag
、ageagoie
和 ag77eage
的每个值都给出为 match
。 replacer()
returns 所有 match
的大小写为 match.slice(0,2) + 'xxxxx' + match.slice(6)
。这样,返回agxxxxxeag agxxxxxie agxxxxxge
。
为了只处理match
个数,这样修改怎么样?请修改replacer()
函数如下
发件人:
return match.slice(0,2) + 'xxxxx' + match.slice(6);
收件人:
return /[0-9]/.test(match) ? match.slice(0,2) + 'xxxxx' + match.slice(6) : match;
结果:
ageoageag ageagoie agxxxxxge
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
编辑:
如果输入的值之间用space隔开,比如ageoageag ageagoie ag77eage
,这样修改怎么样?在这个修改中,const regexs
没有被使用。
发件人:
for(let r of regexs){
stdin = stdin.replace(r[0], r[1]);
}
收件人:
stdin = stdin.split(" ").map(function(e) {
return e.length > 6 && e.length <= 300 && /[0-9]/.test(e) ? e.slice(0,2) + 'xxxxx' + e.slice(6) : e;
}).join(" ");
我有这个脚本:
let stdin = '';
process.stdin
.setEncoding('utf8')
.resume()
.on('data', d => {
stdin+= d;
});
const regexs = [
[/(?=.*[^a-zA-Z])[0-9a-zA-Z]{7,300}/g, function replacer(match, p1, p2, p3, offset, string) {
return match.slice(0,2) + 'xxxxx' + match.slice(6);
}]
];
process.stdin.once('end', end => {
for(let r of regexs){
stdin = stdin.replace(r[0], r[1]);
}
console.log(stdin);
});
我是这样使用它的:
echo "ageoageag ageagoie ag77eage" | node sanitize-stdin.js
我明白了:
agxxxxxeag agxxxxxie agxxxxxge
但我真的只想替换长度为 6-300 的字符串(如果其中包含数字)。所以我正在寻找的输出是:
ageoageag ageagoie agxxxxxge
任何人都知道如何仅在其中至少有一个数字的情况下替换该字符串?
如果你的脚本被修改了,这个修改怎么样?
在您的脚本中,replacer()
函数中的 match
是拆分后的字符串。当输入 "ageoageag ageagoie ag77eage"
时,ageoageag
、ageagoie
和 ag77eage
的每个值都给出为 match
。 replacer()
returns 所有 match
的大小写为 match.slice(0,2) + 'xxxxx' + match.slice(6)
。这样,返回agxxxxxeag agxxxxxie agxxxxxge
。
为了只处理match
个数,这样修改怎么样?请修改replacer()
函数如下
发件人:
return match.slice(0,2) + 'xxxxx' + match.slice(6);
收件人:
return /[0-9]/.test(match) ? match.slice(0,2) + 'xxxxx' + match.slice(6) : match;
结果:
ageoageag ageagoie agxxxxxge
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
编辑:
如果输入的值之间用space隔开,比如ageoageag ageagoie ag77eage
,这样修改怎么样?在这个修改中,const regexs
没有被使用。
发件人:
for(let r of regexs){
stdin = stdin.replace(r[0], r[1]);
}
收件人:
stdin = stdin.split(" ").map(function(e) {
return e.length > 6 && e.length <= 300 && /[0-9]/.test(e) ? e.slice(0,2) + 'xxxxx' + e.slice(6) : e;
}).join(" ");