我正在使用外部api。
该对象的某些条目如下所示:
描述:“观看完整的12分钟电影:https://vimeo.com/108679594 \ n \ n由飞利浦电视和原子滑雪片制作\ n特写:Pep Fujas,Eric Hjorleifson,Daron Rahlves和Chris Benchetler \ n音乐:急救包: “我的银色衬里”\ n \ n从创意视觉的深度到开创性的,从未完成过的拍摄规模,Afterglow被誉为有史以来最具影响力的滑雪电影之一。深枕头和阿拉斯加的刺,都是在晚上拍摄的,有大量的灯光,定制的LED套装,以及值得物流,规划和土木工程的国家政府。\ n \ n作为Sweetgrass Productions,飞利浦电视和瑞典代理商Ahlstrand之间的合作伙伴关系&Wållgren,它是两部分的创造力,一部分品牌内容,以及一小撮受虐待的好措施。“
我试图遍历上面的字符串并用断行空格替换所有\n
。我还想在<a>
标记内包含以 http:// 或 https:// 开头的所有句子。
到目前为止我得到了什么:
function formatString(str) {
str.replace(new RegExp('\r?\n','g'), '<br />');
return str;
}
这适用于将\n
替换为<br>
,但不确定如何继续第二部分(包装到<a>
)。
请注意,由于API中有数百个条目,因此此函数必须格式化很多字符串。
答案 0 :(得分:2)
您只需在另一个替换正则表达式上标记以转换链接。 Mathias Bynens - URL Regex是一个很好的页面,可以基于您的正则表达式(取决于您希望它的复杂程度)。
function formatString(str) {
return str.replace(/\r?\n/g, '<br />')
.replace(/((https?|ftp):\/\/[^\s/$.?#].[^\s\\\<]*)/g, "<a href='$1'>$1</a>");
}
答案 1 :(得分:0)
首先,您需要从一些随机字符串中提取网址。
This answer总结得很好。正则表达式可能不是您的首选,或者您可以在description
中找到一种模式吗?
var description = "asdjipasd https://www.google.de/?client=safari#q=google+params&gfe_rd=cr\n\nsdasiojdas asijsadasd";
function findurl(input) {
var sanitized = input.split(/\n/)[0];
var matched = /http/.exec(sanitized).index;
url = description.substring(matched, sanitized.length)
return '<a href="'+url+'">link here</a>';
}
console.log(findurl(description));
//=> <a href="https://www.google.de/?client=safari#q=google+params&gfe_rd=cr">link here</a>
Obviously this requires您的输入看起来或多或少与您展示的一样,在第一个\n
之前有网址。
通过换行符拆分描述,使用返回数组的第一个索引,并将其与url模式的开头(http
)匹配。
match
返回一个带有索引属性的对象,该属性允许您从索引中选择一个子字符串到“已清理的”字符串的末尾。字符串。
答案 2 :(得分:0)
我认为它正在发挥作用:
str.replace(/http[s]?\:\/\/\S+/g, function(match, content, offset, s) {return '<a href="'+match+'">'+match+'</a>'})
.replace(/\r?\n/g, "<br/>");
首先replace
匹配以&#34; http&#34;开头的所有内容或&#34; https&#34;,将其作为回调中的match
变量传递。回调的返回('<a>'+match+'</a>'
)将替换字符串中的匹配。
第二次替换是你的。