2017-03-02 15 views
0

フレーズの周囲にスパンを追加して、一致するフレーズをテキスト内で強調表示する正規表現を作成しました。テキストには、テキスト内のどこにでも<b></b>が含まれていて、それを無視して一致させる必要があります。続き は私のコードです:フレーズ一致を強調するJavascript RegEx

var phraseArray = phrase.split(" "); 
var phraseRegex = ""; 
if (phraseArray.length > 1) { 
    var regexSuffix = '+([/\\s]|<\/b>|<b>)+'; 
    for (var i = 0; i < phraseArray.length; i++) { 
     phraseRegex += phraseArray[i] + regexSuffix; 
     if (i == phraseArray.length - 2) { 
      regexSuffix = ""; 
     } 
    } 
} else { 
    phraseRegex = phrase; 
} 
text = text.replace(new RegExp('(' + '([,\\s]|<\/b>|<b>)+' + phraseRegex + '([\\s/,.*]|<\/b>|<b>)+' + ')', 'gi'), '<span class="highlighted">&nbsp;$1&nbsp;</span>'); 

フレーズがAirways Aviationで、テキストの場合:

​​

次の出力である:エアウェイズ航空の

<span class="highlighting"> <b>Airways Aviation</b>.</span> Airways Aviation .Airways Aviation. fra 
> Jet Airways. Jet Airways (A range of talented people make it 
> happen every day at<span class="highlighting"> Airways Aviation, .</span> 

2回目の出現が強調表示されていません。どのような理由があり、どのように強化することができますか?

+1

あなたの質問は何ですか?それは動作していないか、コードの拡張を求めていますか? – Rikin

+0

動作していません。どのような理由があり、どのように強化することができますか? –

+0

@ManojSutharあなたの質問がはっきりしない答えを確認してください。それはあなたが欲しいものですか? –

答えて

1

[あなたの質問の編集に基づいてEDIT]
[コメントをもとにEDIT]

あなたはグローバルマッチのためgフラグを使用する必要があります。

  • を一致させるword"(<b>)?"+word+"(</b>)?" //を追加することで、新しい正規表現がまたは全て
  • がスパンと上記の正規表現を置き換える試合の開始と終了時<b></b>gを含んmaynotて作成します
  • $ &試合

を追加

ワーキングモデル

function test(word){ 
 
    word=word.split(" ").join("(<b>|</b>|\\s)*"); 
 
    var re=new RegExp("(<b>)?"+word+"(</b>)?",'g'); 
 
    var str=document.getElementById('div'); 
 
    str.innerHTML=str.innerHTML.replace(re,"<span class=\"highlighting\">$&</span>"); 
 
}
span.highlighting{ 
 
    background-color:#ccc; 
 
    color:#fff; 
 
}
<body> 
 
<div id="div"><b>Airways Aviation</b>. Airways<b> Aviation</b> .Airways Aviation. fra Jet Airways. Jet Airways (India A range of talented people make ithappen every day at <b>Airways</b> Aviation, .</div> 
 
<button onclick="test('Airways Aviation');">Change</button> 
 
</body>

+0

答えをありがとう。しかし、それは "Airways Aviation"で失敗します。ボールドタグはフレーズのどこにでも置くことができます。フレーズの任意の単語やサブフレーズを太字で囲むことができます –

+0

[mark.js](https://markjs.io/)を試しましたか? – dude

+0

をチェック@ManojSutharを編集しました。 –

関連する問題