javascript

时间:2016-07-29 09:35:24

标签: javascript regex

不确定这是否可以在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标签,运行此代码对抗匹配。

1 个答案:

答案 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);