使用iOS为多种语言解析#hashtags和@usernames的推文

时间:2011-02-26 11:51:28

标签: javascript ios regex parsing hashtag

我想转换一条推文,以便在UIWebView中显示。我想将#hashtags和@usernames转换为html链接,然后我将处理它。

我找到了一些使用正则表达式的解决方案,但大多数似乎都有问题,因为电子邮件地址和网络链接中可能包含“@”字符。

有没有人知道在Objective-C中执行此操作的适当方法?是否可以使用iOS 4 and later中提供的正则表达式来完成?或者我需要使用解析器来获得时髦吗?

哦,是的,忘记提及,我希望这适用于所有语言。 (阿拉伯语,中文,德语等...)

1 个答案:

答案 0 :(得分:2)

如果您在网页浏览中这样做,为什么不继续使用javascript?我在一个项目中完成了这项工作,必须自动找到链接。我无法依赖webview的数据检测器,因此简短的javascript帮助:

someTweet.replace(
   /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,
   "<a href='$1'>$1</a>"
)

正则表达式很简单,可能无法捕获每个网址,但大部分时间都是如此。将其转移到用户名和主题标签应该不会太困难。

用户名由字符,数字和_组成,因此@([1-9a-zA-Z _] +)将匹配它们。

someTweet.replace(
   /@([1-9a-zA-Z_]+)/,
   "<a href='http://twitter.com/$1'>@$1</a>")
)

主题标签,我不确定这些:我认为它们是以#开头的任何内容,并以空格,#或@终止,但这只是猜测。 #([^ \ s#@] *)可能有效。

someTweet.replace(
   /#([^\s#@]*)/,
   "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"
)