我有一个 textarea 和一个下拉列表。我设置了它,因此如果用户执行@name
(或任何操作),它将显示具有指定输入的用户下拉列表。我不知道如何使用正则表达式在其中搜索数组@name
。
示例:用户类型"Hi @bob"
,则数组为["Hi","@bob"]
;
我如何找到在哪里@bob
以及如果用户在词后点击空格,正则表达式会检测是否在它之后放置了一个空格。
我试过的示例代码
$(document).keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == 64) { //Enter keycode
$('.postingArea').on("keyup", function(){
var inputVal = $(this).val();
var res = inputVal.split(" ");
console.log(jQuery.inArray( "@/w/", res ));
var myString = inputVal.match(/@([^ ]*)/)[1];
var resultDropdown = $(this).siblings(".result2");
if (jQuery.inArray( "@", res ) < 1) {
resultDropdown.empty();
}else {
$.get("../Admin/Users/SearchUser.php", {userAtd: myString}).done(function(data){
// Display the returned data in browser
resultDropdown.html(data);
});
}
})
}
这种工作,但jQuery.inArray
不接受正则表达式,所以它只在@被点击时有效,但不适用于后面的其余字母。然后它应该检测单词后面何时有空格,以便它知道@ 已完成。
当做 console.log(res); 日志中的输出是 ["this", "is", "a", "test", "@user"] 我需要的是它检测 @ 何时被点击,然后当数组的那部分完成时因为击中空间使数组 res 现在 ["this", "is", "a", "test", "@user",""]
我想出了答案,@Flo 的回应帮助我想出了这个。我必须检测两个不同的数组长度并比较两者并找到 @ 在两个数组之间开始的位置,然后将变量 x 设置为原始输入的长度,然后执行 .test 作为我的 if 语句。下面的代码
// @'d feature
$(document).keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == 64) { //Enter keycode
$('.postingArea').on("keyup", function(){
var inputVal = $('.postingArea').val();
var res = inputVal.split(" ");
var res2 = inputVal.match(/@[a-z\d]+/ig);
var resultDropdown = $(this).siblings(".result2");
var x=0;
if(x <= res2.length){
x = res.length-1;
}
if(/@[a-z\d]+/ig.test(res[x])) {
var myString = res[x];
$.get("../Admin/Users/SearchUser.php", {userAtd: myString}).done(function(data){
// Display the returned data in browser
resultDropdown.html(data);
});
}else {
resultDropdown.empty();
}
})
}
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句