在JavaScript中,如何在保持原始消息不变的情况下,将每个$WORD替换为href to网站



我有点不知所措。我正在处理StockTwits数据,他们API的一个要求是,你需要链接他们的"现金标签"(一个标签,但不是使用#,而是使用$(。

我的输入数据是

这是我的惊人消息,有一个股票$符号,我需要点击

我需要的是(字符串格式(

这是我关于股票<a href ='https://stocktwits.com/symbol' target='_blank> $symbol </a>的惊人消息,我需要点击

很明显,当它被渲染时,我只会让$symbol可以点击,而不是整个a href标记。

如果有帮助的话,对于每条消息,我都有一个将出现在它们前面的所有符号的数组(不带$(。

现在我正在努力做到这一点,这有点混乱,但不确定如何使其正常工作。我这样做是出于反应。

//Message incoming is: 'This is my amazing message with a stock $symbol that I need to click on'
const message_body = unescape(this.props.data.body)
//used for finding what words to replace. Output is ['symbol1', 'symbol2', 'symbol3']
let find = [];
for(let symbl of this.props.data.symbols){
find.push(symbl.symbol)
}
//used for setting the values I want to replace in the incoming message 
let replace = [];
for(let symbl of find){
let url = `https://stocktwits.com/${symbl}`
let link = `<a href=${url} target="_blank">${symbl}</a>`
replace.push(link)
}
//using the replace-once library, it takes the message, words to find, what to replace them with, and global or not.
let formed_message = replaceOnce(message_body, find, replace, 'gi')
...... 
//using react-html-parser to convert the <a href> tags into a clickable link
<Card.Text>{ReactHtmlParser(formed_message)}</Card.Text>

我所有的代码都将输出

这是我的惊人消息,有一个股票$符号,我需要点击

$不包括在链接中,而且如果symbol出现在其他任何地方,它将使其成为链接。下的示例

$GOOG$SPY$AAPL偏离主题。干得好,GOOGle!

在上面的消息中,它仍然将GOOGLe变成了一个链接,我只想考虑那些以$开头的链接。

正如我所说,这是超级混乱的,我很接近,但对任何和所有的建议都持开放态度。

感谢

请尝试以下操作:

let formed_message = this.props.data.symbols.map({symbol} = symbol).reduce(
(p, s) => p.replace(`$${s}`, `<a href ='https://stocktwits.com/${s}' target='_blank> $${s}</a>`), 
message_body
)

const message_body = "This is my amazing message with a stock $symbol that I need to click on and also test $symbol2";
console.log(['symbol', 'symbol2', 'symbol3'].reduce(
(p, s) => p.replace(`$${s}`, `<a href ='https://stocktwits.com/${s}' target='_blank> $${s}</a>`), 
message_body
))

您可以使用正则表达式来匹配所有以美元符号开头的单词。

let text = 'This is my amazing message with a stock $symbol that I need to click on';
let res = text.replace(/$(w+)/g, (match,group)=>
`<a href ='https://stocktwits.com/${group}' target='_blank> ${match} </a>`);
console.log(res);

相关内容

  • 没有找到相关文章

最新更新