获取@value并用JavaScript中的正则表达式替换它
我想从文本中获取每个用户名(@name),并将其替换为与以前相同的值,只是在链接中。我已经得到了下面的代码,它正在工作,但是如果我在一个文本中有多个@tag,它将用最后一个替换它们。例如: @twitter@google@facebook将是@facebook@facebook@facebook获取@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
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