什麼是替換字符串中的URL並將它們呈現爲與React鏈接的正確方法?反應:替換文本中的鏈接
說我有一個字符串:'hello http://google.com world'
,我希望它像渲染:hello <a href="http://google.com">http://google.com</a> world
什麼是替換字符串中的URL並將它們呈現爲與React鏈接的正確方法?反應:替換文本中的鏈接
說我有一個字符串:'hello http://google.com world'
,我希望它像渲染:hello <a href="http://google.com">http://google.com</a> world
好了,這是我做的。
class A extends React.Component {
renderText() {
let parts = this.props.text.split(re) // re is a matching regular expression
for (let i = 1; i < parts.length; i += 2) {
parts[i] = <a key={'link' + i} href={parts[i]}>{parts[i]}</a>
}
return parts
}
render() {
let text = this.renderText()
return (
<div className="some_text_class">{text}</div>
)
}
}
試試這個庫,它正是你需要: https://www.npmjs.com/package/react-process-string
從這裏舉個例子:
const processString = require('react-process-string');
let config = [{
regex: /(http|https):\/\/(\S+)\.([a-z]{2,}?)(.*?)(|\,|$|\.)/gim,
fn: (key, result) => <span key={key}>
<a target="_blank" href={`${result[1]}://${result[2]}.${result[3]}${result[4]}`}>{result[2]}.{result[3]}{result[4]}</a>{result[5]}
</span>
}, {
regex: /(\S+)\.([a-z]{2,}?)(.*?)(|\,|$|\.)/gim,
fn: (key, result) => <span key={key}>
<a target="_blank" href={`http://${result[1]}.${result[2]}${result[3]}`}>{result[1]}.{result[2]}{result[3]}</a>{result[4]}
</span>
}];
let stringWithLinks = "Watch this on youtube.com";
let processed = processString(config)(stringWithLinks);
return (
<div>Hello world! {processed}</div>
);
,將取代所有的鏈接有或無 「HTTP://」 協議。如果您只想用協議替換鏈接,請從config數組中刪除第二個對象。
基礎上OP自己的答案,我想出了一個班輪:
{text
.split(/[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi)
.map((part, index) => index % 2 === 0 ? part : <a href={part} target="_blank">{part}</a>
}
首先添加<a>
標籤字符串:
function httpHtml(content) {
const reg = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g;
return content.replace(reg, "<a href='$1$2'>$1$2</a>");
}
console.log(httpHtml('hello http://google.com world'))
// => hello <a href="http://google.com">http://google.com</a> world
然後渲染字符串作爲HTML反應:
function MyComponent() {
return <div dangerouslySetInnerHTML={{
__html: httpHtml('hello http://google.com world')
}} />;
}
就像你在JavaScript中做的那樣? –
這只是救了我,你所有推薦@ HenrikAndersson評論的推銷員顯然從未使用過React。 – Mathletics
你好。 –