javascript - Javascript,如何正确找到文本中的模式并替换?
问题描述
在以下 html 文本中:
<p>Here are some users you mentioned:
<span class="mention-inserted">@johnsmith1</span>,
<span class="mention-inserted">@daisy_apple23</span>,
<span class="mention-inserted">@bob.erricson</span>.
//... some more text //
</p>
我如何找到所有的
<span class="mention-inserted">@{user}</span>
并将它们转换为<a></a>
带有添加类的标签,保持它们各自的位置而不删除任何其他文本?
所以
<span class="mention-inserted">@johnsmith1</span>
应该简单地转换为
<a class="mention-inserted active-link">@johnsmith1</a>
& 很快。这比我相信的更复杂吗?还是我公然错过了正则表达式的简单使用?
解决方案
与其尝试为非常规语言提出正则表达式,不如使用querySelectorAll()
. 这将允许您选择所有具有 class 的 span 元素mention-inserted
。然后,您可以使用 循环访问此集合,.forEach
并使用 将span
元素更改为链接.outerHTML
。
请参见下面的示例:
document.querySelectorAll('span.mention-inserted').forEach(elem => {
elem.outerHTML = `<a class="${elem.classList.value} active-link">${elem.innerHTML}</a>`;
});
.active-link {
color: blue;
cursor: pointer;
}
<p>
Here are some users you mentioned:
<span class="mention-inserted foo">@johnsmith1</span>,
<span class="mention-inserted">@daisy_apple23</span>,
<span class="mention-inserted">@bob.erricson</span>
</p>
如果您的文本是 JS 中的字符串(而不是 HTML),您可以使用 aDOMParser
代替,这将允许您使用上述方法:
const str = `<p>Here are some users you mentioned: <span class="mention-inserted">@johnsmith1</span>,<span class="mention-inserted">@daisy_apple23</span>,<span class="mention-inserted">@bob.erricson</span></p>`;
const parsed = new DOMParser().parseFromString(str, "text/html").body;
parsed.querySelectorAll('span.mention-inserted').forEach(elem => {
elem.outerHTML = `<a class="${elem.classList.value} active-link">${elem.innerHTML}</a>`;
});
const result = parsed.innerHTML; // String output/result
document.body.appendChild(parsed); // HTMLHtmlElement object output
console.log(result);
.active-link {
color: blue;
cursor: pointer;
}
推荐阅读
- microsoft-edge - 更改 MS Edge 的语言
- android - 使用 Firebase 后 React Native Task :app:processDebugGoogleServices 失败
- ruby - 有没有办法重用 Cucumber 的 env.rb 上的 spec_helper.rb 文件中的内容?
- angular - 在立即更新另一个 Promise 中的值后,使用带有 Promise 的 from 运算符时,Observable 会得到错误的值
- unit-testing - while循环中的单元测试输入
- javascript - 如何向呼叫者发送请求以提醒他们拒绝来电?
- bash - 遍历每个子文件夹的函数
- python - 错误:无法为 numpy 构建轮子,这是安装基于 pyproject.toml 的项目所必需的
- html - 第 508 节:“从链接中删除下划线”标记为 SortSite 中的关键 508 项
- java - 在“将 Spring 静态导入加载到 Eclipse 代码辅助收藏夹”期间发生内部错误