我有点不知所措。我正在处理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!
在上面的消息中,它仍然将GOOGL
e变成了一个链接,我只想考虑那些以$开头的链接。
正如我所说,这是超级混乱的,我很接近,但对任何和所有的建议都持开放态度。
感谢
请尝试以下操作:
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);