Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得以下两个单词'@';使用javascript在字符串中_Javascript_Regex - Fatal编程技术网

如何获得以下两个单词'@';使用javascript在字符串中

如何获得以下两个单词'@';使用javascript在字符串中,javascript,regex,Javascript,Regex,我正在实现一个类似于Facebook的“typeahead”好友/追随者功能 当用户在注释框中键入“@”键时,需要对照呈现自动完成列表的用户名json数组检查接下来的两个单词 当用户按下“@”时,我已经有一个事件正在触发,然后将全文字符串发送到一个单独的函数中,我打算在该函数中对其执行匹配。我现在只需要解析这个文本并检索“@”后面的文本 因此,实际的问题是如何检索字符串中直接跟在“@”后面的文本 必须从字符串中“@”的最后一次出现中提取匹配项。(允许在与用户类型相同的字符串中进行多个自动完成。)

我正在实现一个类似于Facebook的“typeahead”好友/追随者功能

当用户在注释框中键入“@”键时,需要对照呈现自动完成列表的用户名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

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

从我的控制台:

var a = "@tony @stark"
> undefined
var b = a.lastIndexOf('@')
> undefined
a.substr(b, a.length)
> "@stark"
或者,如果你愿意的话

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

可以吗

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

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

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

你能发布一个示例输入字符串和你想要的输出吗?当然。。。我将编辑问题它可能足够快,可能比使用indexof快:regexp在浏览器中进行了大量优化,特别是在浏览器不是动态的情况下。@nrabinowitz-谢谢,这看起来不错,但是如果我只输入了名字,例如只输入了'Joh'而不是'John Smith',并且即使只输入了第一个单词的一部分,我也需要它来返回匹配项,那么它将返回null。然后使用
/@(\w+(\w+)[^@]*$/
所有好的答案,谢谢。在决定将答案授予谁之前,我只是做了一些测试。谢谢dystroy,这里有几个正确的答案,但我已经将它授予您添加JSFIDLE。非常感谢大家。
var regex = /@(\w+ \w+)[^@]*$/,
    myString = "@spork and @abe lincoln spam spam spam",
    match = myString.match(regex)[1];
// match == "abe lincoln"