不要试图用正则表达式来做,你应该使用 DOM 操作将有问题的文本节点移动到p
你创建的标签。这里有一些代码可以满足您的需要。
http://jsfiddle.net/jWRh5/
// Find the h2
var h2 = document.querySelector("h2");
// Create the p element you need
var p = document.createElement("p");
// Move the text node into the p element
p.appendChild(h2.firstChild);
// Insert the p element before the h2
h2.parentNode.insertBefore(p, h2);
// Get rid of the h2
h2.parentNode.removeChild(h2);
如果你想违背其他人的建议,这里有一种使用 RegExp 来实现你需要的方法http://jsfiddle.net/jWRh5/1/
它使用了一个不太受支持的功能,outerHTML
(它在主要浏览器的最新版本中工作)
var h2 = document.querySelector("h2.title");
var s = h2.outerHTML;
s = s.replace("<h2 class=\"title\" style=\"font-color: red;\">","<p>");
s = s.replace(/<\/h2>/g, "</p>");
h2.outerHTML = s;
以下是如何为页面上的所有 h2.titles 执行此操作(不使用 RegExp 方式,因为这是一种非常糟糕的方式,但如果您真的打算使用它,您可以将其用作指南)
var h2s = document.querySelectorAll("h2.title");
// Loop backwards since we're modifying the list
for (var i = h2s.length -1 ; i >=0; i--) {
var h2 = h2s[i];
var p = document.createElement("p");
p.appendChild(h2.firstChild);
h2.parentNode.insertBefore(p, h2);
h2.parentNode.removeChild(h2);
}