我想转换一条推文以在 UIWebView 中显示。我想将#hashtags 和@usernames 转换为 html 链接,然后我将处理这些链接。
我找到了一些使用正则表达式的解决方案,但大多数似乎都存在问题,因为电子邮件地址和 Web 链接中可能包含“@”字符。
有谁知道在 Objective-C 中执行此操作的适当方法吗?可以使用正则表达式来完成吗,正则表达式在 iOS 4 and later 中可用?或者我需要熟悉解析器吗?
哦,对了,忘了说,我希望它适用于所有语言。 (阿拉伯语、汉语、德语等...)
最佳答案
如果您在 WebView 中执行此操作,为什么不继续使用 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>"
)
关于javascript - 使用 iOS 为多种语言解析推文的#hashtags 和@usernames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5126717/