如何使用javascript在字符串中的'@'后面的下两个单词

时间:2012-10-02 16:58:16

标签: javascript regex

我正在实施' typeahead'朋友/粉丝的功能与Facebook上的相似。

当用户输入' @'在注释框中键入下一个单词需要根据呈现自动完成列表的json用户名数组进行检查。

当用户按下' @'时,我已经有一个事件正在触发,然后将全文字符串发送到我打算执行匹配的单独函数中。我现在只需解析此文本并检索' @'之后的文本。

因此,实际问题是如何检索直接跟随' @'在一个字符串中。

匹配必须从' @'的最后次结构中提取。在字符串中。 (允许在与用户类型相同的字符串内进行多次自动完成。)

希望能更好地掌握正则表达式/ JS字符串操作的人可以提供帮助。

提前致谢。

编辑:

只是添加一些例子:

@John Smith says hello

应该返回:

John smith says hello    OR  simply 'John Smith' - Either is okay for this purpose

然而这个字符串:

I was talking to @John Smith and he told me all about @Sarah Smith

应该只返回:

 Sarah Smith

3 个答案:

答案 0 :(得分:2)

可以吗?

txt.substring(txt.lastIndexOf('@')+1).split(' ').slice(0, 2).join(' ')

Demo

答案 1 :(得分:1)

我不会使用正则表达式,而是使用lastIndexOf

从我的控制台:

var a = "@tony @stark"
> undefined
var b = a.lastIndexOf('@')
> undefined
a.substr(b, a.length)
> "@stark"

或者,如果您愿意

a.substr(b+1, a.length)
> "stark"

* 更新

function getRest(a) {
  var b = a.lastIndexOf('@'); 
  return a.substr(b+1, a.length);
}
getRest('@John Smith says hello')
> "John Smith says hello"
getRest('I was talking to @John Smith and he told me all about @Sarah Smith')
> "Sarah Smith"

答案 2 :(得分:0)

正则表达式为/@(\w+ \w+)[^@]*$/(@符号,两个单词,后跟非@字符,直到字符串结尾)。我不确定这是否比子串/分裂方法更快。

var regex = /@(\w+ \w+)[^@]*$/,
    myString = "@spork and @abe lincoln spam spam spam",
    match = myString.match(regex)[1];
// match == "abe lincoln"