我有一个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”,“”]
答案 0 :(得分:0)
您可以使用以下正则表达式提取以“ @”开头并且在字符串后有空格的每个单词。
/@[a-z\d]+/ig
查看示例:https://regex101.com/r/WDZNyl/1
获得列表后,您将更容易在数据库中找到所需的值。
答案 1 :(得分:0)
我想出了答案,@ 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();
}
})
}
})