2016-07-29 64 views
1

不確定如果這可以在JavaScript下的正則表達式完成,但認爲這將是有趣的,看看是否有可能。 所以我以爲我會清理一塊html來刪除大多數標籤,從字面上只是放下它們,所以<H1><img><a href ....>。這將是相對簡單的(好吧,偷了另一篇文章的基礎,謝謝karim79 Remove HTML Tags in Javascript with Regex)。正則表達式循環和邏輯在JavaScript

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") 
     } 
    } 

但有可能更聰明,寫鱈ethat這裏說的是HTML標籤的peice的,運行鍼對該代碼比賽。

+0

對於HTML不是很簡單的情況下,其他的任何操作,你可能要考慮使用的解析器,而不是正則表達式。 –

+0

我一開始就在想,但是有沒有「可配置」的。在這種情況下,安全性方面只有一半。原因在於HTML中的內容來自一篇文章,並且代碼預計將採用第一個「n」個字符,並將其作爲文章的一個簡化版。 – vrghost

回答

2

正如在其評論添Biegeleisen賽,也許是更好的解決方案,可以使用分析器,而不是一個正則表達式...

順便說一句,如果你想控制什麼是要通過正則表達式來改變你可以傳遞一個回調到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);

+0

看起來不錯。也許是一個愚蠢的問題,那是什麼語言(val.indexOf的if語句對我來說看起來不像javascript,但這可能是因爲我沒有足夠的核心。 – vrghost

+0

是的,這是javascript:https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf – Hitmands

+1

現在有道理,舊的ksh scriptie我的自我,所以認爲這可能是一些奇怪的正則表達式代碼。只是你寫代碼與我不同(可能更好,畢竟,你回答了我的問題)。如果我寫了War and Piece,我會寫:) – vrghost