javascript
  • regex
  • 2017-03-02 54 views 0 likes 
    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> 
    

    第二次出现是不突出。这是什么原因以及如何加强?

    +1

    你有什么问题吗?它不工作还是你要求改进你的代码? – Rikin

    +0

    它不工作。可能是什么原因以及如何加强? –

    +0

    @ManojSuthar检查你的问题答案并不清楚。那是你要的吗? –

    回答

    1

    [根据你的问题编辑编辑]
    [根据注释编辑]

    您必须使用g标志全局匹配。

    • 得到word要匹配
    • 创建一个新的RegExp与添加 "(<b>)?"+word+"(</b>)?" //可能或maynot包含<b></b>在开始和结束,g对比赛所有
    • 替换跨度上述正则表达式
    • $ &添加匹配

    var str="<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 Airways Aviation, ." 
     
        
     
    function test(word){ 
     
        word=word.split(" ").join("(<b>|</b>|\\s)*"); 
     
        var re=new RegExp("(<b>)?"+word+"(</b>)?",'g'); 
     
        console.log(str.replace(re,"<span class=\"highlighting\">$&</span>")); 
     
    } 
     
    test("Airways Aviation");

    工作模式

    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编辑。 –

    相关问题