用href将#tags和@name包装在一个字符串中

时间:2014-02-13 15:32:02

标签: jquery string replace

我正在寻找一种解决方案来替换字符串中的#tags,@ name和URL,并用href包装这些元素。

我的字符串值

{
content: What is role of semantic tech in enabling high-powered #bigdata, #bigdatamgmt, @name, http://bitly.com
}

我的代码到目前为止

f_addcontent_links: function(data){

    var temp = data,
        hashtag_count = data.match(/#([^\s]+)/g),
        atTag_count = data.match(/@([^\s:]+)/g),
        newtemp, updated_content;

        console.log(hashtag_count);

    if(typeof(temp) !== "undefined" && temp.length > -1){

        for (var i = 0; i <= hashtag_count.length; i++) {
            newtemp = temp.replace(/#([^\s]+)/g, '<a href="//twitter.com/search?q='+hashtag_count+'">'+hashtag_count+'</a>');
                // .replace(/@([^\s:]+)/g, '<a href="//twitter.com/'+atTag_count[i]+'">'+atTag_count[i]+'</a>');
        }
        delete temp;
    }
    return newtemp;
},

我的问题是字符串被替换为字符串中的最后一个#tag值。 语义技术在实现强大的#bigdata,#bigdatamgmt 搜索方面的作用是什么?的#bigdata,#bigdatamgmt

我需要使用相同值的#,@,url周围的href包装器来更新字符串

2 个答案:

答案 0 :(得分:0)

Plunker Demo

注意:这不符合我的想法...您需要修改for循环,请查看match的内容1}}来电。

<强> JS

function f_addcontent_links(data){
    var temp = data,
        hashtag_count = data.match(/[^#]+([^,]+)/ig),
        atTag_count = data.match(/[^@]+([^,]+)/ig),
        newtemp, updated_content;

        console.log(hashtag_count);

    if(typeof(temp) !== "undefined" && temp.length > -1){
        for (var i = 0; i <= hashtag_count.length; i++) {
            newtemp = temp.replace(/[^#]+([^,]+)/ig, '<a href="//twitter.com/search?q='+hashtag_count+'">'+hashtag_count+'</a>');
        }
    }
    return newtemp;
}

window.onload=function(){
  console.log(f_addcontent_links("{content: What is role of semantic tech in enabling high-powered #bigdata, #bigdatamgmt, @name, http://bitly.com}"));
}

正则表达式

这会找到元素

[^#]+([^,]+)

Regular expression visualization

Debuggex Demo


这会找到 @ 元素

[^@]+([^,]+)

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

我找到了使用正则表达式的解决方案。它从我的数组中获取了我的值,并更新了我的JSON对象的内容attr中的所有字符串内容。

f_mod_content: function(data){          
            var update_content = data.replace(/(http(s)*\:\/\/[^\s]+\s*)/g, "<a href=\"$1\">$1</a>")
                                .replace(/#([^\s]+)/g, '<a href="//twitter.com/search?q=%23$1">#$1</a>')
                                .replace(/@([^\s:]+)/g, '<a href="//twitter.com/$1">@$1</a>');
                return update_content;
        },