我正在使用 Twitter API 并希望将所有 URL 转换为超链接。
你想出的最有效的方法是什么?
从
string myString = "This is my tweet check it out http://tinyurl.com/blah";
到
This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>
正则表达式可能是您完成此类任务的朋友:
Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");
匹配 URL 的正则表达式可能需要一些工作。
我对使用 JSON API的 jquery 做了同样的事情,这里是 linkify 函数:
String.prototype.linkify = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
return m.link(m);
});
};
这实际上是一个丑陋的问题。URL 可以包含(并以)标点符号,因此当 URL 嵌入到普通文本中时,很难确定 URL 的实际结束位置。例如:
http://example.com/.
是一个有效的 URL,但它也很容易成为句子的结尾:
I buy all my witty T-shirts from http://example.com/.
在找到空格之前,您不能简单地解析,因为这样您就会将句点保留为 URL 的一部分。在找到句点或空格之前,您也不能简单地解析,因为句点在 URL 中非常常见。
是的,正则表达式是你的朋友,但构建适当的正则表达式是困难的部分。
也可以看看这个:Expanding URLs with Regex in .NET。
/为红狼队欢呼
来自:this.replace(/[A-Za-z]+://[A-Za-z0-9- ]+.[A-Za-z0-9- :%&\?/.=]+/ , 函数(m){...
见:/[A-Za-z]+://[A-Za-z0-9- ]+.[A-Za-z0-9- :%&\?/.=]+/
有地址“anyprotocol”://“anysubdomain/domain”的代码。“anydomainextension and address”,
它是字符串操作其他用途的完美示例。您可以使用 .replace 随意切片和切块,并在需要的地方插入适当的“a href”。
我使用 jQuery 在我的内容加载逻辑中轻松地将这些链接的属性更改为“target=_blank”,即使 .link 方法不允许您自定义它们。
我个人喜欢为字符串对象添加一个自定义方法以进行动态字符串过滤(String.prototype.linkify 声明),但我不确定这将如何在您需要的大规模环境中发挥作用必须组织 10 多个自定义的类似链接的功能。我认为那时你肯定必须对你的代码结构做其他事情。
也许兽医会在这里偶然发现并启发我们。
您可以通过使用带有正则表达式的 MatchEvaluator 委托函数对此添加更多控制:假设我有这个字符串:
在 http://www.stackoverflow.com 上找到更多信息
现在试试这段代码
private void ModifyString()
{
string input = "find more on http://www.authorcode.com ";
Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?");
string result = regx.Replace(input, new MatchEvaluator(ReplaceURl));
}
static string ReplaceURl(Match m)
{
string x = m.ToString();
x = "< a href=\"" + x + "\">" + x + "</a>";
return x;
}