如何格式化JS中的字符串?

时间:2016-06-28 17:19:09

标签: javascript jquery regex

我正在使用外部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中有数百个条目,因此此函数必须格式化很多字符串。

3 个答案:

答案 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>')将替换字符串中的匹配。

第二次替换是你的。