javascript - 如何将变量添加到正则表达式以匹配
问题描述
当模板呈现为静态 HTML 文件时,我想进行二次过滤。
如何匹配标签textNode
中的a
是否等于变量。如果相等,则将删除整个 a 标签。
<a class="tags-cloud-link" href="/tags/common/" rel="tag">mathjax test<span class="tags-cloud-count">1</span></a>
<a class="tags-cloud-link" href="/tags/markdown/" rel="tag">markdown<span class="tags-cloud-count">1</span></a>
<a class="tags-cloud-link" href="/tags/mathjax-test/" rel="tag">common<span class="tags-cloud-count">1</span></a>
如果我的变量是mathjax test
,匹配替换的结果应该是
<a class="tags-cloud-link" href="/tags/markdown/" rel="tag">markdown<span class="tags-cloud-count">1</span></a>
<a class="tags-cloud-link" href="/tags/mathjax-test/" rel="tag">common<span class="tags-cloud-count">1</span></a>
let htmlText = `<a class="tags-cloud-link" href="/tags/common/" rel="tag">mathjax test<span class="tags-cloud-count">1</span></a><a class="tags-cloud-link" href="/tags/markdown/" rel="tag">markdown<span class="tags-cloud-count">1</span></a><a class="tags-cloud-link" href="/tags/mathjax-test/" rel="tag">common<span class="tags-cloud-count">1</span></a>`;
let $2 = 'mathjax test';
//let $2 = 'markdown';
//let $2 = 'common'
if (/<a class="tags-cloud-link"(.*?)> {How to use variables $2 = mathjax test} <span(.*?)>(.*?)<\/span><\/a>/gi.test(htmlText)) {
console.log('new htmlText');
//`<a class="tags-cloud-link" href="/tags/markdown/" rel="tag">markdown<span class="tags-cloud-count">1</span></a><a class="tags-cloud-link" href="/tags/mathjax-test/" rel="tag">common<span class="tags-cloud-count">1</span></a>`
}
解决方案
您可以使用一个<template>
元素来完成此操作:
var html = `<a class="tags-cloud-link" href="/tags/common/" rel="tag">mathjax test<span class="tags-cloud-count">1</span></a>
<a class="tags-cloud-link" href="/tags/markdown/" rel="tag">markdown<span class="tags-cloud-count">1</span></a>
<a class="tags-cloud-link" href="/tags/mathjax-test/" rel="tag">common<span class="tags-cloud-count">1</span></a>`
var myVar = "mathjax test";
var template = document.createElement("template");
template.innerHTML = html.trim();
var elems = template.content.children;
Array.from(elems).forEach(el => {
var nodes = el.childNodes;
nodes.forEach(node => {
// text nodes are of type 3
if(node.nodeType == 3) {
if(node.textContent == myVar) {
// remove your element
console.log("Element should be removed");
}
}
});
});
推荐阅读
- java - 使用两个数据库时,如何在第二次运行中不获取记录?
- css - 具有无/零值的 CSS 规则
- google-apps-script - 保证app脚本中google sheet数据的访问和修改互斥
- asp.net-core-mvc - ExceptionHandlerMiddleware|发生未处理的异常:对象引用未设置为对象的实例
- javascript - 计算增值税
- javascript - 试图将一个字母推入一个数组以显示在页面上
- c# - Xamarin.Forms UWP 项目当前不会命中断点。没有为此文档加载任何符号
- reactjs - 在 Jest 中,是否可以在嵌套回调中模拟模块,以便您可以使用不同的属性多次模拟它?
- c# - Git 忽略对文件的更改,但将其保留在 repo 中
- java - Node.js 中的 AES 加密和 Java Android 中的解密