Javascript:获取以@符号开头的用户名子字符串

时间:2014-10-19 15:27:05

标签: javascript html

我正在寻找一种方法,让一个或多个用户名在字符串中以@符号开头。

一些示例字符串可能是:

  • " @username这只是一个测试字符串"
  • " Blabla bla @username这只是一个测试字符串"
  • " @ username1,@ username2和@username_three的消息:这只是一个测试字符串! - @ username4"

任何解决方案?我找不到任何东西。

提前致谢!

4 个答案:

答案 0 :(得分:5)

一次出现

要匹配单个匹配项,请使用不带任何修饰符的正则表达式,然后使用@删除.replace("@", "")

var myString = "Hey @username this is a test string";

var username = myString.match(/@[a-z0-9_]*/)[0].replace("@", "");    
// This will be "username"

多次出现

对于多次出现,请使用带有g修饰符的正则表达式匹配多个字符串,然后使用.map()方法删除每个字符串开头的@字符使用.replace("@", "").filter()删除空用户名的用户名:

var myString = "Hey @username1 and @username_two, this is just a test string! @username3";

var usernames = myString.match(/@[a-z0-9_]*/g).map(function(x) { return x.replace("@", ""); }).filter(function(x) { return !!x; });
// This will be ["username1", "username_two", "username3"]

注意:我正在使用正则表达式/@[a-z0-9_]*/g,因为该用户名只能包含字母,数字和下划线(至少在最常见的网站上,如Twitter等)。

答案 1 :(得分:4)

尝试正则表达式:

var m = "@username This is just a test string".match(/@(.+?)\b/);
console.log(m); // ["@username", "username"]

答案 2 :(得分:1)

其他答案可以正常工作 (主要是) 。我将其添加为匹配多个用户名实例的替代方法:

var str = "random @foo string @bar test @baz";
var usernames = str.split(/@(\w+)/).filter(function(_, i) { return i % 2; });
// [ "foo", "bar", "baz" ]

这是有效的,因为如果在调用.split时在模式中放置一个捕获组,它将在结果数组中包含该匹配的组。然后你只需要采取所有其他数组元素。

另请注意,ECMAScript 5.1中添加了.filter,因此旧版浏览器可能不支持此版本。如果这是一个问题,要么使用MDN文章中描述的polyfill技术,要么使用简单的for循环。

答案 3 :(得分:-2)

只是做:

var user = "@username";
var user2 = user.split("@")[1];