首页 > 解决方案 > 如何将变量添加到正则表达式以匹配

问题描述

模板呈现为静态 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>`
}

标签: javascriptregex

解决方案


您可以使用一个<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");
      }
    }
  });
});


推荐阅读