【问题标题】:Replace all strings and wrap as html替换所有字符串并包装为 html
【发布时间】:2020-03-30 15:31:22
【问题描述】:

我想在 html 中查找和替换字符串并将它们替换为标签。
来自my name is ron and his name is ben
my name is <b>ron</b> and his name is <b>ben</b>

这是我的代码,部分工作:https://stackblitz.com/edit/react-gjriyz

export default function App() {
  const arr = ["ron", "ben"];
  const str = "my name is ron and his name is ben";
  let res = "";
  for (var i in arr) {
    res = str.replace(arr[i], "<b>" + arr[i] + "</b>");
  }
  return (
    <div className="App">
      <span dangerouslySetInnerHTML={{ __html: res }} /> <br />
      <br /> 
      expected result: <br />
      my name is <b>ron</b> and his name is <b>ben</b>
    </div>
  );
}

【问题讨论】:

标签: reactjs grunt-string-replace


【解决方案1】:

您只是从原始字符串更新 res 而不是增量更新 res,因此最后一个替换操作胜过所有操作。

export default function App() {
  const arr = ["ron", "ben"];
  const str = "my name is ron and his name is ben";
  let res = str;
  for (var i in arr) {
    // iterate on res, not str
    // res = str.replace(arr[i], "<b>" + arr[i] + "</b>");
    res = res.replace(arr[i], "<b>" + arr[i] + "</b>");
  }
  return (
    <div className="App">
      <span dangerouslySetInnerHTML={{ __html: res }} /> <br />
      <br /> 
      expected result: <br />
      my name is <b>ron</b> and his name is <b>ben</b>
    </div>
  );
}

【讨论】:

  • 这是正确的,您在第一个循环中替换 str ,然后在第二个循环中再次替换原始值。这忽略了第一次所做的更改
【解决方案2】:

我认为问题在于,您没有在此处连接结果。

 let res = "";
  for (var i in arr) {
    res = str.replace(arr[i], "<b>" + arr[i] + "</b>");
  }

必须如下所示。

 let res = str;
  for (var i in arr) {
    res = res.replace(arr[i], "<b>" + arr[i] + "</b>");
  }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 2016-04-12
  • 1970-01-01
  • 2022-08-17
  • 2016-03-01
  • 2011-06-09
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多