Javascript 如何使用正则表达式忽略字符串替换中的某些单词

Javascript 如何使用正则表达式忽略字符串替换中的某些单词,javascript,regex,replace,Javascript,Regex,Replace,我有包含5到6个单词的字符串,我想用荧光笔样式替换一些单词 $(document).ready(function() { var str = "Micromax Samsung S3 Microsoft Galaxy S"; var arr = ["Micro", "s"]; arr.forEach(function(item) { str = str.replace(new RegExp(item.replace(/\+/g, "\\+"),

我有包含5到6个单词的字符串,我想用荧光笔样式替换一些单词

$(document).ready(function() {
     var str = "Micromax Samsung S3 Microsoft Galaxy S";
     var arr = ["Micro", "s"];
     arr.forEach(function(item) {
          str = str.replace(new RegExp(item.replace(/\+/g, "\\+"), "g"), '<span class="red">'+ item +'</span>');
     })
     $('#dvHtml').html(str);
});
$(文档).ready(函数(){
var str=“Micromax三星S3微软Galaxy S”;
var arr=[“微”、“s”];
arr.forEach(功能(项目){
str=str.replace(新的RegExp(item.replace(/\+/g,“\\+”,“g”),“+item+”);
})
$('#dvHtml').html(str);
});
但我得到了整个字符串中的每个s,包括但我不想替换

任何机构能否帮助我从替换中排除或忽略以下项目

  • 输出应为

    现在这将用
    Micro
    替换Micro,用
    s
    替换s

    以下是输出
    不要重新发明轮子。这里有一个处理该问题的突出显示插件:


    希望能有帮助。来自玻利维亚拉巴斯的欢呼声

    不要重新发明轮子。这里有一个处理该问题的突出显示插件:


    希望能有帮助。干杯,来自玻利维亚拉巴斯

    您需要像这样更改您的regexp

    var str = "Micromax Samsung S3 Microsoft Galaxy S";
    var arr = ["Micro", "s"];
    var t = str.replace(new RegExp('\\b('+arr.join('|')+')',"gi"), '<span class="red">$1</span>');
    
    $('#dvHtml').html(t);
    
    var str=“Micromax三星S3微软Galaxy S”;
    var arr=[“微”、“s”];
    var t=str.replace(新的RegExp('\\b('+arr.join('|')+'),“gi”),“$1”);
    $('#dvHtml').html(t);
    
    在这个

    • \b
      -在begin word中查找
    • arr.join(“|”)
      -返回类似于
      a | b
      的字符串-因此找到其中任何一个
    • gi
      -用于
      global
      忽略大小写的标志

    您可以在

    上试用。您需要更改regexp,类似这样的内容

    var str = "Micromax Samsung S3 Microsoft Galaxy S";
    var arr = ["Micro", "s"];
    var t = str.replace(new RegExp('\\b('+arr.join('|')+')',"gi"), '<span class="red">$1</span>');
    
    $('#dvHtml').html(t);
    
    var str=“Micromax三星S3微软Galaxy S”;
    var arr=[“微”、“s”];
    var t=str.replace(新的RegExp('\\b('+arr.join('|')+'),“gi”),“$1”);
    $('#dvHtml').html(t);
    
    在这个

    • \b
      -在begin word中查找
    • arr.join(“|”)
      -返回类似于
      a | b
      的字符串-因此找到其中任何一个
    • gi
      -用于
      global
      忽略大小写的标志

    您可以在

    上试用,这里有另一个解决方案

    function escapeRegExp(str) {
      return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
    
    function highlight(str, needle){      
          var parts = str.split(/<[/]?span.*?>/gi);
          for(var i=0; i<parts.length; i++){
              if(i%2 == 0){            
                  parts[i] = parts[i].replace(new RegExp("("+escapeRegExp(needle)+")", 'gi'), '<span class="red">$1</span>');        
              }else{
                  parts[i] = '<span class="red">'+ parts[i] +'</span>';                
              }
          }
          return parts.join('');    
    }
    
    $(document).ready(function() {
       var str = "Micromax Samsung S3 Microsoft Galaxy S";
       var arr = ["Micro", "S"];
       arr.forEach(function(item) {
            str = highlight(str, item);
       });
       console.log(str);
       $('#dvHtml').html(str);
    });
    
    函数escapeRegExp(str){
    返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
    }
    功能突出显示(str,指针){
    var parts=str.split(//gi);
    
    对于(var i=0;i,这里有另一个解决方案

    function escapeRegExp(str) {
      return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
    
    function highlight(str, needle){      
          var parts = str.split(/<[/]?span.*?>/gi);
          for(var i=0; i<parts.length; i++){
              if(i%2 == 0){            
                  parts[i] = parts[i].replace(new RegExp("("+escapeRegExp(needle)+")", 'gi'), '<span class="red">$1</span>');        
              }else{
                  parts[i] = '<span class="red">'+ parts[i] +'</span>';                
              }
          }
          return parts.join('');    
    }
    
    $(document).ready(function() {
       var str = "Micromax Samsung S3 Microsoft Galaxy S";
       var arr = ["Micro", "S"];
       arr.forEach(function(item) {
            str = highlight(str, item);
       });
       console.log(str);
       $('#dvHtml').html(str);
    });
    
    函数escapeRegExp(str){
    返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
    }
    功能突出显示(str,指针){
    var parts=str.split(//gi);
    

    对于(var i=0;我现在正在显示什么?谢谢您的评论,我已经用Output更新了我的问题,它现在显示什么?谢谢您的评论,我已经用输出来更新我的问题,以获得您的答复,但由于某些原因,我无法使用此库。您能帮我改进我的答案吗?谢谢您的回答,但我不能出于某种原因使用此库。你能帮我改进我的答案吗?真棒…非常好的解决方案谢谢你快速正确的回答。我的投票是+1@imdadhusen你是威康:-)你不能再对字符串应用相同的过程…这对询问者有效吗?@EdgarvillegaSalvara你的意思是什么?如果你做了
    str=t
    ,然后重新运行替换行,它会断开。它对询问者有效吗?也许这是一个很好的解决方案…非常感谢你快速而正确的回答。我的投票是+1@imdadhusen你很好ome:-)你不能再对字符串应用相同的过程…这对询问者有效吗?@EdgarvillegaSalvara你是什么意思?如果你这样做,然后重新运行替换行,它会断开。对询问者有效吗?可能很好…真的很感谢你的努力,这真的能帮助我摆脱字符或字符串形式的句子。我的vote+太好了…我真的很感谢你们的努力,它真的帮助我摆脱了字符或字符串形式的句子。我的投票+