如何从输入中获取@name的数组索引?

时间:2019-05-20 15:33:37

标签: javascript jquery arrays regex database

我有一个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”,“”]

2 个答案:

答案 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();

    } 
  })
  }
})