我是一个主做企业网站的小小小技术,想实现以下功能:
  在后台发布产品说明信息或新闻时,要自动为内容中出现的(事先设置好的)关键词添加网站链接,每个关键词只在第一次出现时添加。
newsContent = newsContent.replace(keyWord, "<a href=url>keyWord</a>")  问题:
  如果一个关键词中包含另一个关键词时,该怎么处理?  例如有以下关键词(顺序随机且不进行排序):临沂企业网站建设,网站,临沂企业,互联网,免烧砖机
如果某新闻中同时包含以上关键词,在给第一个关键词添“临沂企业网站建设”加完链接后,怎么让第二个关键词“网站”不会错误地添加到第一个词中?  请高手指教。

解决方案 »

  1.   

       我想到的就是2次替换,并且关键词要按长度来排序,要不 对于 临沂企业网站建设,网站 这个2个关键词不按长度排序时,对于文章中出现 临沂企业网站建设时,如果先替换了 网站,那么 临沂企业网站建设 就永远替换不到了,而正确的应该是替换 临沂企业网站建设
    参考
    var s='我是一个主做企业网站的小小小技术,想实现以下功能:\
      在后台发布产品说明信息或新闻时,要自动为内容中出现的(事先设置好的)关键词添加网站链接,每个关键词只在第一次出现时添加。\
    newsContent = newsContent.replace(keyWord, "keyWord")\
      问题:\
      如果一个关键词中包含另一个关键词时,该怎么处理?\
      例如有以下关键词(顺序随机且不进行排序):临沂企业网站建设,网站,临沂企业,互联网,免烧砖机\
    如果某新闻中同时包含以上关键词,在给第一个关键词添“临沂企业网站建设”加完链接后,怎么让第二个关键词“网站”不会错误地添加到第一个词中?'
    , kws = '临沂企业网站建设,网站,临沂企业,互联网,免烧砖机'.split(',').sort(function (a, b) { return b.length - a.length; })//按长度排序,长的在前面for (var i = 0; i < kws.length; i++) s = s.replace(new RegExp(kws[i], 'g'), '__' + i.toString() + '__');
    for (var i = 0; i < kws.length; i++) s = s.replace(new RegExp('__' + i + '__', 'g'), '<a href="search.aspx?kw=' + kws[i] + '">' + kws[i] + '</a>');
    document.write(s);
      

  2.   

    此问题在ASP区已由“binfanny”给出解决方法:
    简单的方法 关键字 按照字数由小到大排序 这样 替换的时候 就不存在你的问题了 因为已经有了</a>标记谢谢楼上三位!其实我js很差,只是想在这边找到问题的解决方法。谢谢showbo,正则我看不懂,不过你的排序方法俺收下了!再次感谢三位!
      

  3.   

    现在我有同样在问题,支持showbo在结果