我正在用户输入上运行一个RegExp来测试连续3个或更多的大写字母。我有一个循环找到RegExp然后将它添加到一个数组。另一个创建新数组的循环。当我运行.replace时,似乎该数组不会被循环。
var abbrBracket = /\([A-Z]{3,30}\)/g;
var abbrBracketArr = [];
var a;
while (a = abbrBracket.exec(nonCode)) {
abbrBracketArr.push(a[0]);
}
var capFoundInArr = /[A-Z]{3,30}/g;
var abbrBracketArrRemove = [];
var b;
while (b = capFoundInArr.exec(abbrBracketArr)) {
abbrBracketArrRemove.push('(<abbr>' + b[0] + '</abbr>)');
}
for(var c = 0; c < abbrBracketArrRemove.length; c++){
nonCode = document.getElementById('cleanse').innerHTML;
//nonCode = nonCode.replace(new RegExp(/\([A-Z]{3,30}\)/), abbrBracketArrRemove[c]);
nonCode = nonCode.replace(new RegExp(abbrBracketArr[c]), abbrBracketArrRemove[c]);
document.getElementById('cleanse').innerHTML = nonCode;
}
结果显示,如果有两个(或更多)相同的缩写,第一个被执行多次,下一个被跳过。
说,我使用完全相同的代码运行第二个查询替换,我没有收到此错误。
var abbrNoBracket = /\s[A-Z]{3,30}/g;
var abbrNoBracketArr = [];
var d;
while (d = abbrNoBracket.exec(nonCode)) {
abbrNoBracketArr.push(d[0]);
}
var abbrNoBracketArrRemove = [];
var e;
while (e = capFoundInArr.exec(abbrNoBracketArr)) {
abbrNoBracketArrRemove.push(' <abbr title="">' + e[0] + '</abbr>');
}
for(var f = 0; f < abbrNoBracketArrRemove.length; f++){
nonCode = document.getElementById('cleanse').innerHTML;
nonCode = nonCode.replace(new RegExp(abbrNoBracketArr[f]), abbrNoBracketArrRemove[f]);
document.getElementById('cleanse').innerHTML = nonCode;
}
在第一个块中,如果我使用RegExp而不是数组,你可以看到我注释掉了一行。有用。好奇,为什么这对一个人有效,而另一个无效。
答案 0 :(得分:0)
发现我的错误,这是在一夜好眠之后非常明显的。
我在阵列上调用了一个新的RegExp。一旦我删除它,一切都按预期工作。
app.get('/downloads', function(req, res) {
res.render('downloads.ejs');
});
app.post('/downloads', function (req,res){
console.log("Python script begins");
pythonShell.run('./generator.py', function (err) {
if (err) throw err;
console.log("Python Script Ended");
res.download('mapCreated.tiff', 'map.tiff');
});
})
希望这有助于其他人。