获取@value并用JavaScript中的正则表达式替换它

获取@value并用JavaScript中的正则表达式替换它,javascript,regex,Javascript,Regex,我想从文本中获取每个用户名(@name),并将其替换为与以前相同的值,只是在链接中。我已经得到了下面的代码,它正在工作,但是如果我在一个文本中有多个@tag,它将用最后一个替换它们。例如: @twitter@google@facebook将是@facebook@facebook@facebook for (var i = 0; i < cusid_ele.length; ++i) { var item = cusid_ele[i]; const str

我想从文本中获取每个用户名(@name),并将其替换为与以前相同的值,只是在链接中。我已经得到了下面的代码,它正在工作,但是如果我在一个文本中有多个@tag,它将用最后一个替换它们。例如:

@twitter@google@facebook将是@facebook@facebook@facebook

for (var i = 0; i < cusid_ele.length; ++i) {
        var item = cusid_ele[i];  
        const str = item.innerHTML;
        const regex = /([@])\w+/g;
        var arr = [];

        let m;

        while ((m = regex.exec(str)) !== null) {
            // This is necessary to avoid infinite loops with zero-width matches
            if (m.index === regex.lastIndex) {
                regex.lastIndex++;
            }

            // The result can be accessed through the `m`-variable.
            m.forEach((match, groupIndex) => {
                if(match != "@"){

                    arr.push(match)
                }
            });

        }
        for(k=0;k!=arr.length;k++){
            spl = arr[k].split("@")
            item.innerHTML = str.replace(regex, `<a href="`+spl[1]+`" target="_blank" class="at">`+arr[k]+`</a>`);    
        }

    }
for(变量i=0;i{
如果(匹配!=“@”){
arr.push(比赛)
}
});
}
对于(k=0;k!=arr.length;k++){
spl=arr[k]。拆分(“@”)
item.innerHTML=str.replace(regex,``);
}
}

使用正则表达式的简单方法:

var text=“@one@two@three test”;
var matches=text.match(/@\w+/g);
var result=text.replace(/@\w+/g,matches[matches.length-1]);
控制台日志(结果)用jQuery解决:

      $('.postContent').each(function(){ // to each <p>
          r = /@\w+/g; // big letter with word symbols, global search
          function f(x){
            return '<a href="'+x+'" class="at">'+x+'</a>' // rewrited
          }
          h = $(this).html(); //get
          h = h.replace(r,f); //replace
          $(this).html(h); //set
        }) //done   
     }
$('.postContent').each(function(){//to each
r=/@\w+/g;//带单词符号的大号字母,全局搜索
函数f(x){
返回“”//已重写
}
h=$(this.html();//获取
h=h.replace(r,f);//replace
$(this.html(h);//设置
})//完成
}

如果我运行此代码,我得到的“错误”与最后一个字替换前一个字相同:(@Eyk不确定你的意思,你能再次检查答案吗(我编辑了它)我的问题是我想得到一个二三测试,而不是三个三:D@nicael