我有一个正则表达式从textarea获取@user。当用户用@键入内容时,我会得到它。
我的问题是,我想得到最后一场比赛,而不是所有比赛。
例如:
用户类型:
@josh and @marie = want to show @marie
@josh loves @marie and @anne = show @anne
我的代码显示如下:
@josh,@marie,@anne
我可以获得最后一个@something条目吗? (当用户输入时)
var word=/@(\w+)/ig;
$("#comment").on("keyup",function() {
var content = $(this).val();
var name = content.match(word);
var dataString = name;
if(name.length > 0) {
$("#result").text(name);
}
return false();
});
HTML
<textarea id=comment>@josh and @marie</textarea>
<div id=result></div>
答案 0 :(得分:4)
我的建议是,您只显示结果的最后一个条目。
您可以通过更改行来执行此操作:
var name = content.match(word);
到
var names = content.match(word).split(',');
var name = names[names.length - 1];
更详细地说,它的作用是从正则表达式中获取所有结果,而不是将其转换为数组,分割每个单词。然后它将数组的最后一项归因于name
变量。
希望这有用。
答案 1 :(得分:4)
除了获得所有匹配并获得最后一个匹配之外,您还可以使用捕获组来获取最后一个匹配项:
var word=/.*(@\w+)/i;
var name = content.match(word)[1];
或者使用exec,整体看起来像:
var word=/.*(@\w+)/i;
$("#comment").on("input",function() { //changed keyup to input
var content=$(this).val();
var match = word.exec(content);
if(match){
$("#result").text(match[1]);
}
});
PS,如果你的目标是更通用的方法,你需要在获取所有单词和单个单词之间切换,我建议保持全局匹配,并在Jonas的回答中得到最后一个。
答案 2 :(得分:2)
您可以简单地选择或弹出.match()
返回的匹配数组中的最后一个匹配项var word=/@(\w+)/ig;
$("#comment").on("keyup",function() {
var content=$(this).val();
var matches = content.match(word);
var lastmatch = matches.pop();
//IF YOU NEED TO KEEP INTACT THE VAR MATCHES
//var lastmatch = matches[matches.length - 1];
if(name.length>0){
$("#result").text(lastmatch);
}
return false();
});
答案 3 :(得分:1)
使用这个正则表达式&#39; / @(\ w +)$ / ig&#39; insted&#39; / @(\ w +)/ ig& #39;
然后你的代码会像魅力一样运行。 ;)
var word=/@(\w+)$/ig;
$("#comment").on("keyup",function() {
var content=$(this).val();
var name = content.match(word);
var dataString = name;
if(name.length>0){
$("#result").text(name);
}
return false();
});
答案 4 :(得分:1)
我喜欢这个答案,你把所有的@名字,@ name1,@ name2列在你的列表中,然后拆掉最后一个,但这里只是一步
//split on @something
//the penultimate item is our target
//if there is < 2 items there weren't any @somethings so return ''
user = (split = "testing @charlie testing".split(/(@[^ ]*)/)).length > 1 ? split.splice(-2,1)[0] : '';
答案 5 :(得分:0)
只有一行可以做
var name = content.match(word).reverse()[0];