首页 > 解决方案 > Javascript String#replaceAll 仅适用于一个实例

问题描述

我有一段文本,方括号中有一些字符串,如 [value] 我正在尝试运行一个函数,让用户为每个 [...] 输入一个值。我大部分时间都在工作,但是当我 console.log 更改的正文时,只有一些值发生了变化。其中一些具有 html 标签,[<strong>Hello</strong>]并且它们没有被更改。我只是不确定如何克服它。

let data = $('#elm1').val();
  console.log(data);
  let newData;

  function getWords() {
    let words = data.match(/[^[\]]+(?=])/g);

    console.log(words);

    words.forEach(function(word) {
      console.log(word);

      let input = prompt("Enter value to replace: "+word);

      newData = data.replaceAll("["+word+"]", input);
    });

    console.log(newData);
  }

标签: javascript

解决方案


问题是每次forEach运行时它只是更新一个单词并显示带有更新的最后一个单词的正文。

我通过添加data = newData当循环的迭代碰巧在移动到下一个之前保存以前的更改来解决这个问题。

let data = $('#elm1').val();
  console.log(data);
  let newData;

  function getWords() {
    let words = data.match(/[^[\]]+(?=])/g);

    console.log(words);

    words.forEach(function(word) {
      console.log(word);

      let input = prompt("Enter value to replace: "+word);

      newData = data.replaceAll("["+word+"]", input);
      data = newData; //Added this
    });

    console.log(newData);
  }

推荐阅读