我的网页中有一个字符串(例如0511 51 51 86 86)(可能多次出现),我想用另一个字符串(在这种情况下为0511 51 51 86 86 *)替换它们正则表达式。
我尝试使用replace()函数来查找所有出现的事件并进行替换。使用字符串作为replace()中的参数可以很好地工作。但是如果我使用正则表达式则不会。
我已经尝试过了:
fooba
我想要的是,用正则表达式替换所有这些:0511 51 51 86 86 *:0511 51 51 86 86 *。
答案 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>