将文本转换为基于char接收的链接

时间:2018-01-31 15:44:58

标签: javascript node.js

我有一个包含内容正文的帖子,内容正文中的文本需要正确格式化。 如果内容包含特殊关键字@,#我想将其转换为有用的链接。

 content = "These is a sample post it can contain any thing and i can mention people with @username and show hastag reference #stackoverflowQuestion";
    newContent = content.split(" ");
    username = [];
    hashtag = [];

    newContent.forEach((sub) => {
        at = sub.indexOf("@");
        tag = sub.indexOf("#");
        if(at == 0){
            trendname.push(sub)
        } 
       if(tag == 0){
            hashtag.push(sub)
        }
       return sub;
    });

    username.forEach((user) => {
        user.link = user.replace(/@/, "/${user}");console.log(user.link);
    return user;}); console.log(user.link);
   hashtag.forEach((str) => {
     str.taged= str.replace(/([a-z])([A-Z])/g, '$1 $2').toLowercase;
    return str;}); console.log(str.taged);

首先,上面的代码不是在循环外部记录vakue。 其次是有任何其他方式来重写这些sode,因为它看起来很有效。如果有请指定。 感谢

1 个答案:

答案 0 :(得分:1)

你的问题有点复杂,我认为......但无论如何,我希望以下内容能以某种方式帮助你。

首先,您可以将第一个循环简化为:

let usernames = content.match(/@([^ ]*)/g)
let hashtags = content.match(/#([^ ]*)/g)

这些是正则表达式,它们的工作原理如下:

  1. @#开头(如果您正在寻找用户名或主题标签)
  2. [^ ]*表示“除了空格外的所有内容,多次(*
  3. 现在,您可以构建用户对象:

    let users = usernames.map(username => {
        return {
            username: username,
            link: '/' + username.slice(1, username.length)
        }
    }) // --> [ { username: '@username', link: '/username' } ]
    

    以下是我写的完整代码:

    let content = "These is a sample post it can contain any thing and i can mention people with @username and show hastag reference #stackoverflowQuestion";
    
    let usernames = content.match(/@([^ ]*)/g)
    let hashtags = content.match(/#([^ ]*)/g)
    
    let users = usernames.map(username => {
        return {
            username: username,
            link: '/' + username.slice(1, username.length)
        }
    })
    
    console.log(users)
    

    您的代码有问题。您在字符串数组上创建forEach,然后尝试将属性设置为该字符串:user.link = ...

    其次,您尝试在循环外部记录值,这样做会使您超出循环范围。因此,您无法记录这些变量,这是完全正常的,因为它们不再存在...尝试更好地缩进代码,您将直接看到它。

    希望这会有所帮助,并尝试一些关于你的问题的编写工作,堆栈溢出社区有时会很苛刻