2016-05-04 10 views
1

JavaScript正規表現を使用していて、1つの状況を除いて文字列からHTMLタグを取り除きたいとします。JavaScript正規表現を使用して1つのインスタンス以外のすべてを検索するにはどうすればよいですか?

のは、例えば、この文字列を見てみましょう:

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

私は置き換えるにそれを変換する文字列を使用したいと思います: "link me paragraph <replace meta="data"></replace>"

正規表現について(すべてのHTMLタグが<[/?]replace[.*]>を除く取り除かれます)すべてのタグを削除すると、次のようになります。

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

そこに<replace></replace>の例外はありますか?

答えて

3

否定先読み用途:

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

(?!<\/?replace)否定先読みは、それが交換する開閉タグの場合<[^>]+>が一致しないことを主張します。

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

古典的なアプローチは、最初に一致にあり、あなたは(この場合には<replace>タグ)を維持したいものををキャプチャし、代替として、すべてを一致させますそうでなければ(この場合は他のすべてのタグを保持したくない)、キャプチャしたコンテンツと一致するものを置き換えます。これにより、不要なタグを取り除く効果があります:

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>

負の先読みも細かいソリューションですが、いくつかは、もう少し簡単なこの方法を検討するかもしれません。