我得到了这个Regex /<h([2-4])>(.+)<\/h[2-4]>/g,它匹配所有的h2、h3、h4,并捕获级别和标题文本。
它是否足够好,或者你认为在速度和健壮性方面有改进的余地?
发布于 2015-03-01 13:50:24
不要在HTML上使用regex。您可以使用Element.querySelectorAll。将Element替换为对您喜欢从中选择标题的DOM元素的引用。
var heading = document.querySelectorAll("h2, h3, h4");QuerySelectorAll (和他的兄弟querySelector)使用CSS选择器从DOM中选择元素。您可以使用逗号提供多个选择器。这将选择所有h2-4元素。您可以用以下代码循环它们:
Array.prototype.map.call(heading , function(element){
//do something with the element here.
console.log(element.textContent); //EXAMPLE, display the text in the element.
});因为querySelectorAll返回一个节点列表(这是一个数组对象),所以我们可以将它传递给Array.map (虽然不是直接的)。我们使用Array.prototype.map.call将节点列表作为数组传递给映射函数。Map循环遍历节点列表中的每个元素。
发布于 2015-03-01 13:49:24
让你的判断力做一场非贪婪的比赛。同时也让regex做反向引用。
/<(h[2-4])>([^<>]+)<\/\1>/g或
/<(h[2-4])>((?:(?!<h\d+\b).)+?)<\/\1>/ghttps://stackoverflow.com/questions/28794249
复制相似问题