我有这个脚本:
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
有人知道只有在其中至少有一个数字的情况下才能替换该字符串吗?
答案 0 :(得分:1)
如果您的脚本已修改,那么如何修改?
在您的脚本中,match
函数中的replacer()
是分割的字符串。输入"ageoageag ageagoie ag77eage"
时,ageoageag
,ageagoie
和ag77eage
的每个值都以match
的形式给出。 replacer()
将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
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
如果输入的值之间用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(" ");