2017-04-13 6 views
-1

のコードは、以下の入力を取り、キーワードを探し件のリストを介して実行し、それを強調マークタグでキーワードをラップするでしょう。アンカータグを除外する方法は?

これはほとんどそれがアンカータグの間に発見された場合は正規表現はまた、キーワードを置き換えることを除いて動作します。

はどのようにしてアンカータグを無視するには、以下の正規表現を変更できますか?

ご協力いただければ幸いです。

ありがとうございます。そのような「言葉を見つけることではなく、特定のコンテキスト」のケースを処理することを目的とした

inputHighlight: function(){ 
    let currentURL = document.location.toString(), 
     reviewList = $('.review-list'); 

    if(currentURL.indexOf('kw') !== -1){ 
     var reviews = reviewList.html(); 
     var term = utilities.queryString.getQueryValue("kw"); 
     term = term.replace(/(\s+)/,"(<[^>]+>)*$1(<[^>]+>)*"); 

     var pattern = new RegExp("("+term+")", "gi"); 

     reviews = reviews.replace(pattern, "<mark>$1</mark>"); 
     reviews = reviews.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/,"$1</mark>$2<mark>$4"); 

     reviewList.html(reviews); 
    } 
} 

答えて

0

トリックはここに記述されている:http://www.rexegg.com/regex-best-trick.html。それは本質的に

は:望ましくないコンテキストまたは(使用交代)あなたのパターンに一致します。次に、どの代替案が一致したかに応じて、最初のもの(すなわち、望ましくない状況)をそのまま、またはマークタグによって囲まれた第2のものに置き換えます。

ので交換してください

var pattern = new RegExp("("+term+")", "gi"); 
reviews = reviews.replace(pattern, "<mark>$1</mark>"); 

var pattern = new RegExp("<a\\b[^>]*>.*?<\/a>|("+term+")", "gi"); 
reviews = reviews.replace(pattern, function(match, p1) { 
    return p1 ? "<mark>" + p1 + "</mark>" : match; 
}); 

デモ:

var term = "TEST TERM" 
 
var reviews = document.getElementById("reviews").innerHTML; 
 
var pattern = new RegExp("<a\\b[^>]*>.*?<\/a>|("+term+")", "gi"); 
 
reviews = reviews.replace(pattern, function(match, p1) { 
 
    return p1 ? "<mark>" + p1 + "</mark>" : match; 
 
}); 
 
document.getElementById("reviews").innerHTML = reviews;
<div id="reviews"> 
 
TEST TERM 
 
<a href="#">TEST TERM</a> 
 
</div>

関連する問題