将数组与字符串进行比较,然后用字符串中的公共字符替换数组中找到的所有项目

时间:2018-07-12 20:25:47

标签: javascript arrays string replace

我有一串文本,在某些字符« »和包含UsedKeys的数组之间有100个不同的“键”。我正在尝试将字符串str与数组进行比较,并用对号字符替换在UsedKey数组中找到的所有键。一般而言,我对循环以及JavaScript还是很陌生,而且似乎无法获得脚本来替换除数组中的最后一个键以外的任何键。在这种情况下,应该是«SPLXVIII»

我还有一个名为AllKeys的第二个数组,我想使用它来隐藏所有未使用的键。我确定我必须找出两个数组(UsedKeysAllKeys)之间的区别,但我不确定如何。

问题:

1)如何替换UsedKey数组中的所有键?

2)如何隐藏字符串中不在UsedKey数组中的所有其他键?

function replace() {
var str = ("«SPII» Club T-Bird Pass<br>«SPIV» Free Otter Pop<br>«SPVI» Club T-Bird Pass<br>«SPVIII» Free Water<br>«SPX» Club T-Bird Pass<br>«SPXII» Free Squishy<br>«SPXIV» Free Fast Pass Token (Redeem at thundershack)<br>«SPXVI» Free Hot Cheetos<br>«SPXVIII» Free Fast Pass Token (Redeem at thundershack)<br>«SPXX» Club T-Bird Pass<br>«SPXXII» Free Otter Pop<br>«SPXXIV» Free Grab Bag Item (it could be anything)<br>«SPXXVI» Thundershack Gift Card<br>«SPXXVIII» Free Sour Punch Stick<br>«SPXXX» Club T-Bird Pass<br>«SPXXXII» 50% Off Thundershack 1 item<br>«SPXXXIV» Free Grab Bag Item (it could be anything)<br>«SPXXXVI» Thunder Cash<br>«SPXXXVIII» Club T-Bird Pass<br>«SPXL» WIS Lanyard and Id Pouch<br>«SPXLII» Free Fast Pass Token (Redeem at thundershack)<br>«SPXLIV» Free Soda<br>«SPXLVI» Free Sour Punch Stick<br>«SPXLVIII» Free Grab Bag Item (it could be anything)<br>«SPL» Club T-Bird Pass<br>«SPLII» 50% Off Thundershack 1 item<br>«SPLIV» Me N Eds Pizza<br>«SPLVI» Thundershack Gift Card<br>«SPLVIII» Free Sour Punch Stick<br>«SPLX» Free Soda<br>«SPLXII» Club T-Bird Pass<br>«SPLXIV» Free Otter Pop<br>«SPLXVI» Free Water<br>«SPLXVIII» Club T-Bird Pass<br>«SPLXX» 50% Off Thundershack 1 item<br>«SPLXXII» Free Otter Pop<br>«SPLXXIV» Club T-Bird Pass<br>«SPLXXVI» Club T-Bird Season Pass<br>«SPLXXVIII» Free Otter Pop<br>«SPLXXX» Free Sour Punch Stick<br>«SPLXXXII» 50% Off Thundershack 1 item<br>«SPLXXXIV» Free Fast Pass Token (Redeem at thundershack)<br>«SPLXXXVI» Free Sour Punch Stick<br>«SPLXXXVIII» Free Water<br>«SPXC» Free 6 Flags Magic Mountain Entrance Ticket<br>«SPXCII» Free Otter Pop<br>«SPXCIV» Club T-Bird Pass<br>«SPXCVI» 50% Off Thundershack 1 item<br>«SPXCVIII» Free Water<br>«SPC» Thundershack Spending Spree");

var AllKeys = ["«SPI»","«SPII»","«SPIII»","«SPIV»","«SPV»","«SPVI»","«SPVII»","«SPVIII»","«SPIX»","«SPX»","«SPXI»","«SPXII»","«SPXIII»","«SPXIV»","«SPXV»","«SPXVI»","«SPXVII»","«SPXVIII»","«SPXIX»","«SPXX»","«SPXXI»","«SPXXII»","«SPXXIII»","«SPXXIV»","«SPXXV»","«SPXXVI»","«SPXXVII»","«SPXXVIII»","«SPXXIX»","«SPXXX»","«SPXXXI»","«SPXXXII»","«SPXXXIII»","«SPXXXIV»","«SPXXXV»","«SPXXXVI»","«SPXXXVII»","«SPXXXVIII»","«SPXXXIX»","«SPXL»","«SPXLI»","«SPXLII»","«SPXLIII»","«SPXLIV»","«SPXLV»","«SPXLVI»","«SPXLVII»","«SPXLVIII»","«SPXLIX»","«SPL»","«SPLI»","«SPLII»","«SPLIII»","«SPLIV»","«SPLV»","«SPLVI»","«SPLVII»","«SPLVIII»","«SPLIX»","«SPLX»","«SPLXI»","«SPLXII»","«SPLXIII»","«SPLXIV»","«SPLXV»","«SPLXVI»","«SPLXVII»","«SPLXVIII»","«SPLXIX»","«SPLXX»","«SPLXXI»","«SPLXXII»","«SPLXXIII»","«SPLXXIV»","«SPLXXV»","«SPLXXVI»","«SPLXXVII»","«SPLXXVIII»","«SPLXXIX»","«SPLXXX»","«SPLXXXI»","«SPLXXXII»","«SPLXXXIII»","«SPLXXXIV»","«SPLXXXV»","«SPLXXXVI»","«SPLXXXVII»","«SPLXXXVIII»","«SPLXXXIX»","«SPXC»","«SPXCI»","«SPXCII»","«SPXCIII»","«SPXCIV»","«SPXCV»","«SPXCVI»","«SPXCVII»","«SPXCVIII»","«SPXCIX»","«SPC»"];

var UsedKeys =["«SPII»","«SPXCIV»","«SPLXVIII»"];
for (var i = 0; i < UsedKeys.length; i++) { 
var a = str.replace(UsedKeys[i],"✔️");
}
document.getElementById("index").innerHTML = a; }

非常感谢!

2 个答案:

答案 0 :(得分:1)

您应该使用正则表达式。

for (var i = 0; i < UsedKeys.length; i++) { 
    var regex = new RegExp(UsedKeys[i], 'g')
    var a = str.replace(regex, "✔️");
}

“ g”表示全局。因此,请替换所有出现的情况。

答案 1 :(得分:1)

您可以使用UsedKeys替代运算符将|数组转换为单个正则表达式,以替换所有正则表达式。 g修饰符使其替换所有出现的内容。

var regex = new RegExp(UsedKeys.join('|'), 'g');
var newStr = str.replace(regex, "✔️");

您可以使用以下方法隐藏其余所有内容:

newStr = newStr.replace(/«[^»]*»/g, " ");