请问现在的@功能是如何实现的?我现在的想法是:
不知道大家是不是这么实现的,如果是这么实现的,那么正则表达式是不是不够好?如果用户名跟正文连在一起呢?我发现 ruby-china 的内容即使连接到一起了 还是可以匹配到用户的,但是没找到实现的代码 ):
ruby-china 用的是这个https://github.com/ruby-china/ruby-china/blob/master/app/assets/javascripts/jquery.atwho.js 这里是几个具体的操作 https://github.com/ruby-china/ruby-china/blob/master/app/assets/javascripts/topics.coffee#L236 https://github.com/ruby-china/ruby-china/blob/master/app/assets/javascripts/app.coffee#L95 https://github.com/ruby-china/ruby-china/blob/master/app/assets/javascripts/app.coffee#L115
看 https://github.com/ruby-china/ruby-china/blob/master/lib/markdown.rb 这个文件中的
# convert '@user' to link
# match any user even not exist.
def link_mention_user_in_text(doc, users)
end
谁这么无聊,又去攻击 Github,本来还想接着看看 ruby-china 代码的,结果…… 建议再看看有关 notification 相关的内容,好像还有个 mention
如果是前端的话推荐 ichord 的 at.js, 如果是后端的话,直接用 twitter/twitter-text-rb 就 ok 了 , 等 github ok 了我来上项目链接
class MyClass include Twitter::Extractor usernames = extract_mentioned_screen_names("Mentioning @twitter and @jack") # usernames = ["twitter", "jack"] end
我在我们社区里@人的时候 即使没有空格也是能找出来的,不知道 twitter-text-rb 能不能实现呢? #8 楼 @larryzhao
在自己的应用中也用到的类似的东西,思路基本和你一样。 1.ruby-china 源码可以参考; 2.关于@,前端用 atwho.js,在输入之后显示用户名列表,选择完毕之后默认给空格,这样就能匹配到了。 3.关于中文问题,可以试试下面的正则
def match_user_test(str)
arr = str.scan(/@([\p{Han}+\w]{2,20}\s)/u).flatten
end
4.关于流程,在 comment after_create 后,去 send_comment_notification