正则:高亮多个类似关键词,如京东、京东物流、京东商城…

近来项目碰到一个小需求,就是在一段笔墨中,高亮几个关键词,比方以下笔墨:

京东(JD.com)是中国一家自营式B2C购物网站,创始人刘强东担负京东团体CEO。旗下设有京东商城、京东金融、拍拍网、京东智能、O2O及外洋事业部。2013年正式取得假造运营商派司。2014年5月,在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD)。2016年6月与沃尔玛杀青深度计谋协作,1号店并入京东。2017年1月4日,中国银联宣告京东金融旗下付出公司正式成为银联收单成员机构。2017年4月25日,京东团体宣告正式组建京东物流子团体。2017年8月3日,2017年“中国互联网企业100强”榜单宣布,京东排名第四位。

须要高亮的关键词:京东商城、京东、京东物流、京东团体

最简朴的方法,就是应用正则表达式,像如许:

function addKeyWordHighline(oText,keyWords){
    //oText->一段笔墨,keyWords->关键词数组
    var returnVal=oText;
    for(var i=0;i<keyWords.length;i++){
        if(keyWords[i]!=''){
            returnVal=returnVal.replace(new RegExp(keyWords[i], "g"),'<span class="highLight">'+keyWords[i]+'</span>');
        }
    }
    return returnVal;
}

然则如许子做,会致使两个题目:
1、“京东物流”“京东团体”没法高亮
2、反复增加高亮标签。关键词“京东”在“京东商城”背面,会致使笔墨“京东商城”变成

<span class="highLight"><span class="highLight">京东</span>商城</span>

革新思绪(离别对应题目1、2):
1、将关键词数组排序,长度较长的排在前面,优先高亮
2、将<span class=”highLight”>……</span>地区消除。重要应用正则表达式中的元字符?!pattern(正向否认预查)完成。

正向否认预查:在任何不婚配pattern的字符串最先处婚配查找字符串。这是一个非猎取婚配,也就是说,该婚配不须要猎取供今后运用。比方”Windows(?!95|98|NT|2000)”能婚配”Windows3.1″中的”Windows”,但不能婚配”Windows2000″中的”Windows”。

革新后的代码:

function addKeyWordHighline(oText,keyWords){
    var returnVal=oText,
        i=0,
        wordReg;
    keyWords.sort(compareWordLength);
    
    for(i=0;i<keyWords.length;i++){
        if(keyWords[i]!=''){
            wordReg=new RegExp('(?!<span+>.[^<]*)'+keyWords[i]+'(?!.[^<]*<\/span>)','g');
            returnVal=returnVal.replace(wordReg,'<span class="highLight">'+keyWords[i]+'</span>');
        }
    }
    return returnVal;
}

function compareWordLength(a,b){
    if(a.length>b.length){
        return -1;
    }else if(a.length<b.length){
        return 1;
    }else{
        return 0;
    }
}

终究结果:

《正则:高亮多个类似关键词,如京东、京东物流、京东商城…》

    原文作者:李小心
    原文地址: https://segmentfault.com/a/1190000012977950
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞