如何拉扯@提到string像Twitter中的JavaScript

我在Node.js中编写了一个应用程序,它允许用户在twitter上提示消息。 我希望能够find用户并向他们发送通知。 为了做到这一点,我需要拉@usernames从node.js中的string查找提到?

任何build议,正则expression式,问题?

我发现这是在javascript中查找string内部提及的最佳方法。

var str = "@jpotts18 what is up man? Are you hanging out with @kyle_clegg"; var pattern = /\B@[a-z0-9_-]+/gi; str.match(pattern); ["@jpotts18", "@kyle_clegg"] 

我有意将其限制为大写和小写字母数字和( – ,_)符号,以避免可能会混淆像(@ j.potts)这样的用户名的时间段。

这就是twitter-text.js在幕后做的事情。

 // Mention related regex collection twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|RT:?)/; twttr.txt.regexen.atSigns = /[@@]/; twttr.txt.regexen.validMentionOrList = regexSupplant( '(#{validMentionPrecedingChars})' + // $1: Preceding character '(#{atSigns})' + // $2: At mark '([a-zA-Z0-9_]{1,20})' + // $3: Screen name '(\/[a-zA-Z][a-zA-Z0-9_\-]{0,24})?' // $4: List (optional) , 'g'); twttr.txt.regexen.endMentionMatch = regexSupplant(/^(?:#{atSigns}|[#{latinAccentChars}]|:\/\/)/); 

请让我知道,如果你使用了更有效率或准确的东西。 谢谢!

Twitter有一个库,你应该能够使用这个。 https://github.com/twitter/twitter-text-js

我没有使用它,但是如果你信任它的描述,“图书馆提供自动链接和提取url,用户名,列表和标签。” 你应该可以在npm install twitter-text Node中使用它。

虽然我明白,你不是在寻找Twitter的用户名,相同的逻辑仍然适用,你应该能够使用它罚款(它不validation提取的用户名是有效的twitter用户名)。 如果不是的话,为了自己的目的分叉可能是一个很好的开始。

编辑:我看了文档更接近,有一个完美的例子,你需要在这里 。

 var usernames = twttr.txt.extractMentions("Mentioning @twitter and @jack") // usernames == ["twitter", "jack"] 

这里是你如何从JavaScript标题和下划线提取提及提及。

 var _ = require('underscore'); function parseMentions(text) { var mentionsRegex = new RegExp('@([a-zA-Z0-9\_\.]+)', 'gim'); var matches = text.match(mentionsRegex); if (matches && matches.length) { matches = matches.map(function(match) { return match.slice(1); }); return _.uniq(matches); } else { return []; } }