2016-05-04 13 views
1

Ich benutze JavaScript Regex und möchte HTML-Tags aus einer Zeichenfolge abgesehen von einer Situation entfernen.Wie verwende ich JavaScript Regex, um nach allem außer einer Instanz zu suchen?

die Saite zum Beispiel nehmen lassen:

"<a>link me</a> 
<p class="highlight">paragraph</p> 
<replace meta="data"></replace>" 

Ich möchte Zeichenfolge verwenden ersetzen sie verwandeln sich in: (alle HTML-Tags sind mit Ausnahme <[/?]replace[.*]> gestrippt) "link me paragraph <replace meta="data"></replace>"

Die Regex für Entfernen aller Tags wäre:

html = String(html).replace(/<[^>]+>/gm, ''); 

Wie würde man über die Platzierung gehen die Ausnahme für <replace> und </replace> drin?

Antwort

3

Verwenden negative Vorschau:

/(?!<\/?replace)<[^>]+>/gm 

Die (?!<\/?replace) negative Vorschau behauptet, dass <[^>]+> nicht mithalten können, wenn es sich um eine Öffnung ersetzen ist oder schließenden Tag.

Regex101

var str = `<a>link me</a> 
 
<p class="highlight">paragraph</p> 
 
<replace meta="data">DO NOT REPLACE</replace>`; 
 

 
var re = /(?!<\/?replace)<[^>]+>/gm; 
 

 
document.querySelector('pre').textContent = str.replace(re, '');
<pre></pre>

0

Der klassische Ansatz ist zum ersten Spiel und erfassen, was Sie (in diesem Fall die <replace> Tags), dann als Alternative Spiel alles behalten wollen andernfalls möchten Sie nicht behalten (in diesem Fall alle anderen Tags) und dann ersetzen, was mit dem erfassten Inhalt übereinstimmt, was dazu führt, dass die unerwünschten Tags weggeworfen werden:

var string = `<a>link me</a> 
 
<p class="highlight">paragraph</p> 
 
<replace meta="data"></replace>`; 
 

 
var re = /(<\/?replace.*?>)|<.*?>/g; 
 
//  ^^^^^^^^^^^^^^^^^    CAPTURE WHAT WE WANT TO KEEP 
 
//       ^^^^^  DON'T CAPTURE WHAT WE DON'T WANT TO KEEP 
 

 
var result = string.replace(re, '$1'); 
 
//        ^^^^ REPLACE WITH CAPTURE 
 

 
document.getElementById('result').textContent = result;
<pre id="result"></pre>

Negativer Vorgriff ist auch eine feine Lösung, aber einige könnten diesen Ansatz etwas einfacher zu betrachten.

Verwandte Themen