简体   繁体   English

如何使用“for”和字符串替换?

[英]How to use "for" along with string replace?

I want to make several replacements in the same string.我想在同一个字符串中进行多次替换。 I have this:我有这个:

ignoredids = [{"ignoredid":"3329"},{"ignoredid":"25895"}];
userlist = `<div id="u343">something</div><div id="u3143">something</div><div id="u25895">something</div><div id="u5343">something</div><div id="u3329">something</div>`;

after the replacements it should look like this:替换后它应该是这样的:

<div id="u343">something</div><div id="u3143">something</div><div id="u25895">ignore this</div><div id="u5343">something</div><div id="u3329">ignore this</div>

So I tried:所以我试过:

for (let { ignoredid } of ignoredids) {
  mylist = userlist.replace(`<div id="u${ignoredid}">something</div>`,`<div id="u${ignoredid}">ignore this</div>`);        
} 

but it doesnt seem to do anything.但它似乎没有做任何事情。 What is wrong?怎么了?

The way you wrote it now, it will only replace on the last id and assign it to the mylist variable, because .replace does not mutate the string.按照您现在编写的方式,它只会替换最后一个 id 并将其分配给mylist变量,因为.replace不会改变字符串。

If we assign to userlist instead of mylist it will work the way you want it to work, because then we're actually modifying the string on every iteration:如果我们分配给userlist而不是mylist ,它将按照您希望的方式工作,因为我们实际上是在每次迭代时修改字符串:

 ignoredids = [{"ignoredid": "3329"}, {"ignoredid": "25895"}]; userlist = `<div id="u343">something</div><div id="u3143">something</div><div id="u25895">something</div><div id="u5343">something</div><div id="u3329">something</div>`; for (let { ignoredid} of ignoredids) { userlist = userlist.replace(`<div id="u${ignoredid}">something</div>`, `<div id="u${ignoredid}">ignore this</div>`); } document.getElementById("myDiv").innerHTML = userlist;
 <div id="myDiv"></div>

  • don't use replace() with hardcoded stuff.不要将replace()与硬编码的东西一起使用。
  • Create an Array of "u" prefixed IDs only仅创建一个包含“u”前缀的 ID 数组
  • You should never use Regular Expression on HTML-alike strings.永远不应该在类似 HTML 的字符串上使用正则表达式。
    Use a proper DOM parser instead.改用合适的 DOM 解析器 Read about DOMParser.parseFromString()阅读DOMParser.parseFromString()

 // Helper function const arrHas = (arr, val) => arr.some(a => val === a); // Your stuff: const replacer = "IGNORE THIS"; const ignoredids = [ {"ignoredid":"3329"}, {"ignoredid":"25895"}, ]; const userlist = `<div id="u343">Lorem ipsum</div> <div id="u3143">Dolor sit amet</div> <div id="u25895">consectetur adipisicing</div> <div id="u5343">Elit enim </div> <div id="u3329">Nemo eveniet</div>`; // Create an Array of "u" prefixed IDs const uIDs = ignoredids.map(o => `u${o.ignoredid}`); // Use DOMParser!! const DOC = new DOMParser().parseFromString(userlist, "text/html"); [...DOC.body.children].forEach(EL => { if (arrHas(uIDs, EL.id)) EL.textContent = replacer; }); const result = DOC.body.innerHTML; console.log(result)

result is now this HTML-alike String: result现在是这个类似 HTML 的字符串:

<div id="u343">Lorem ipsum</div>
<div id="u3143">Dolor sit amet</div>
<div id="u25895">IGNORE THIS</div>
<div id="u5343">Elit enim </div>
<div id="u3329">IGNORE THIS</div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM