我有一个包含内容正文的帖子,内容正文中的文本需要正确格式化。 如果内容包含特殊关键字@,#我想将其转换为有用的链接。
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,因为它看起来很有效。如果有请指定。 感谢
答案 0 :(得分:1)
你的问题有点复杂,我认为......但无论如何,我希望以下内容能以某种方式帮助你。
首先,您可以将第一个循环简化为:
let usernames = content.match(/@([^ ]*)/g)
let hashtags = content.match(/#([^ ]*)/g)
这些是正则表达式,它们的工作原理如下:
@
或#
开头(如果您正在寻找用户名或主题标签)[^ ]*
表示“除了空格外的所有内容,多次(*
)现在,您可以构建用户对象:
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 = ...
。
其次,您尝试在循环外部记录值,这样做会使您超出循环范围。因此,您无法记录这些变量,这是完全正常的,因为它们不再存在...尝试更好地缩进代码,您将直接看到它。
希望这会有所帮助,并尝试一些关于你的问题的编写工作,堆栈溢出社区有时会很苛刻