不确定这是否可以在javascript下的regexp中完成,但认为看看它是否可行会很有趣。
所以我想我会清理一段html以删除大多数标签,只是放弃它们,所以<H1><img><a href ....>
。这将是相对简单的(好吧,从另一篇文章中偷走了基础,感谢karim79 Remove HTML Tags in Javascript with Regex)。
function(inString, maxlength, callback){
console.log("Sting is " + inString)
console.log("Its " + inString.length)
var regex = /(<([^>]+)>)/ig
var outString = inString.replace(regex, "");
console.log("No HTML sting " + outString);
if ( outString.length < maxlength){
callback(outString)
} else {
console.log("Lets cut first bit")
}
}
但后来我开始思考,有没有办法可以控制正则表达式执行。因此,我想保留一些标签,例如b,br,i,并可能将H1-6更改为b。所以在伪代码中,例如:
for ( var i in inString.regex.hits ) {
if ( hits[i] == H1 ) {
hits[i] = b;
}
}
问题在于我希望不是HTML标签的文本保持原样,我希望它默认情况下只剪切掉。一种选择当然是改变我想保留的那些。一旦对所有感兴趣的人做了改变,就说改变<b>
到[[b]]。一旦删除了所有未知的内容,请将它们放回<b>
。所以像这样(仅限b,并且不确定下面的代码是否有效):
function(inString, maxlength, callback){
console.log("Sting is " + inString)
console.log("Its " + inString.length)
var regex-remHTML = /(<([^>]+)>)/ig
var regex-hideB = /(<b>)/ig
var regex-showB = /([b])/ig
var outString = inString.replace(regex-hideB, "[b]");
outString = outString.replace(regex-remHTML, "");
outString = outString.replace(regex-showB, "<b>");
console.log("No HTML sting " + outString);
if ( outString.length < maxlength){
callback(outString)
} else {
console.log("Lets cut first bit")
}
}
但是有可能更聪明,编写cod ethat说这是一个HTML标签,运行此代码对抗匹配。
答案 0 :(得分:2)
正如Tim Biegeleisen sai在其评论中所说,也许更好的解决方案可能是使用解析器而不是正则表达式...
顺便说一句,如果你想控制正则表达式会改变什么,你可以将回调传递给String.prototype.replace
:
var input = "<div><h1>CIAO Bello</h1></div>";
var output = input.replace(/(<([^>]+)>)/gi, (val) => {
if(val.indexOf("div") > -1) {
return "";
}
return val;
})
;
console.log("output", output);