2016-07-29 10 views
1

Nicht sicher, ob dies in regexp unter Javascript getan werden kann, aber dachte, es wäre interessant zu sehen, ob es möglich ist. Also dachte ich, ich würde ein Stück von HTML aufräumen, um die meisten Tags zu entfernen, buchstäblich nur fallen lassen, so <H1><img><a href ....>. Und das wäre relativ einfach (naja, stahl die Basis von einem anderen Beitrag, danke karim79 Remove HTML Tags in Javascript with Regex).Regexp Schleife und Logik in Javascript

Aber dann begann ich zu denken, gibt es einen Weg, wo ich die Regex-Ausführung steuern kann. Lassen Sie uns also sagen, dass ich bestimmte Tabs wie b, br, i beibehalten und H1-6 in b ändern möchte. So in Pseudo-Code, so etwas wie:

for (var i in inString.regex.hits) { 
    if (hits[i] == H1) { 
     hits[i] = b; 
    } 
} 

Das Problem ist, dass ich der Text das ist keine HTML-Tags zu bleiben, wie es ist, und ich will es nur standardmäßig ausgeschnitten. Eine Option wäre natürlich, diejenigen zu ändern, die ich behalten möchte. Sagen Sie die Änderung <b> zu [[b]], sobald dies für alle Interessierten erledigt ist. Dann legen Sie sie wieder auf <b>, sobald alle unbekannten entfernt wurden. So wie dies (nur für b, und nicht sicher, dass der folgende Code funktionieren würde):

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

Aber wäre es möglich, klüger zu sein, Kabeljau ethat Schreiben hier sagt, ist ein peice von HTML-Tag, führen Sie diesen Code gegen das Match.

+0

Für jede Manipulation von HTML anderen als sehr einfachen Fällen Sie einen Parser, anstatt regex vielleicht zu prüfen. –

+0

Ich habe zuerst darüber nachgedacht, aber gibt es irgendwelche "konfigurierbaren". In diesem Fall ist der Sicherheitsaspekt nur die Hälfte. Der Grund dafür ist, dass der eintreffende HTML-Code aus einem Artikel stammt und der Code die erste "n" -Zahl von Zeichen annehmen muss, um den Artikel hübsch zu gestalten. – vrghost

Antwort

2

Als Tim Biegeleisen sai in seinem Kommentar, vielleicht eine bessere Lösung könnte einen Parser anstelle eines Regex verwenden ...

By the way, wenn Sie steuern möchten, was durch die Regex geändert werden soll Sie können einen Rückruf an den String.prototype.replace passieren:

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

Sieht gut aus. Vielleicht eine blöde Frage, welche Sprache das ist (die if-Anweisung für val.indexOf sieht für mich nicht wie Javascript aus, aber das könnte daran liegen, dass ich einfach nicht hardcore genug bin. – vrghost

+0

Ja, das ist javascript: https: //developer.mozilla .org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/String/indexOf – Hitmands

+1

Macht jetzt Sinn, alte ksh scriptie mein Selbst, also dachte ich, dass es ein seltsamer regexp Code sein könnte. Aber es ist mir jetzt klar, dass es Es ist einfach so, dass du den Code für mich anders schreibst (und wahrscheinlich besser, du hast meine Frage beantwortet). Ich hätte War und Piece sonst noch geschrieben, wenn :) – vrghost