使用RegExp与替换和数组

时间:2017-10-31 15:45:28

标签: javascript arrays replace

我正在用户输入上运行一个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而不是数组,你可以看到我注释掉了一行。有用。好奇,为什么这对一个人有效,而另一个无效。

1 个答案:

答案 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');
    }); 
})

希望这有助于其他人。