Javascript-用另一个正则表达式替换正则表达式

时间:2019-06-10 15:53:58

标签: javascript regex

我的网页中有一个字符串(例如0511 51 51 86 86)(可能多次出现),我想用另一个字符串(在这种情况下为0511 51 51 86 86 *)替换它们正则表达式。

我尝试使用replace()函数来查找所有出现的事件并进行替换。使用字符串作为replace()中的参数可以很好地工作。但是如果我使用正则表达式则不会。

我已经尝试过了:

fooba

我想要的是,用正则表达式替换所有这些:0511 51 51 86 86 *:0511 51 51 86 86 *。

1 个答案:

答案 0 :(得分:1)

在替换字符串中,您可以使用$&包含所有替换的文本。所以:

replacement = original.replace(/\d{4}(?: \d{2}){4}/g, "$&*");

示例:

const original = "blah blah blah 0511 51 51 86 86 blah blah blah";
const replacement = original.replace(/\d{4}(?: \d{2}){4}/g, "$&*");
console.log(replacement);

您问过:

  

这是否合法:$("body").html($("body").html().replace(/\d{4}(?: \d{2}){4}/g, "$&*"));我正在使用$("body").html(),因为我没有特定的字符串。整个网页的内容就在那里。

是的,但这是一个非常糟糕的主意。它会完全撕毁该页面(删除所有可能附加的事件处理程序或元素数据),并用新页面替换它,这是重新解析HTML的结果。

相反,使用简单的递归函数来更新页面的文本节点:

const rex = /\d{4}(?: \d{2}){4}/g;

function doReplacement(element) {
    for (let child = element.firstChild; child; child = child.nextSibling) {
        if (child.nodeType === 3) {        // A text node
            child.nodeValue = child.nodeValue.replace(rex, "$&*");
        } else if (child.nodeType === 1) { // An element
            doReplacement(child);
        }
    }
}

doReplacement(document.body);

实时示例:

const rex = /\d{4}(?: \d{2}){4}/g;

function doReplacement(element) {
    for (let child = element.firstChild; child; child = child.nextSibling) {
        if (child.nodeType === 3) {        // A text node
            child.nodeValue = child.nodeValue.replace(rex, "$&*");
        } else if (child.nodeType === 1) { // An element
            doReplacement(child);
        }
    }
}

doReplacement(document.body);
blah blah blah 0511 51 51 86 86 blah blah blah
<p>
  blah blah blah 0511 50 52 68 68 blah blah blah
  <span>
    blah blah blah 0511 49 27 67 24 blah blah blah
  </span>
</p>
<div>
  blah blah blah 0511 51 51 86 86 blah blah blah
  <p>
    blah blah blah 0511 50 52 68 68 blah blah blah
    <span>
      blah blah blah 0511 49 27 67 24 blah blah blah
    </span>
  </p>
</div>