Jquery 在JavaScript中搜索正则表达式

Jquery 在JavaScript中搜索正则表达式,jquery,regex,autocomplete,jquery-autocomplete,Jquery,Regex,Autocomplete,Jquery Autocomplete,在数组中搜索JQuery自动完成的正则表达式工作不正常 我有一个数组: var names = [ "Jorn Zaefferer", "Scott Gonzalez", "John Resig" ]; 以下是JQuery的自动完成功能: $( "#developer" ).autocomplete({ source: function( request, response ) { var matcher = new RegExp('^'+request.term,'g');

在数组中搜索JQuery自动完成的正则表达式工作不正常

我有一个数组:

var names = [ "Jorn Zaefferer", "Scott Gonzalez", "John Resig" ];
以下是JQuery的自动完成功能:

$( "#developer" ).autocomplete({
  source: function( request, response ) {
    var matcher = new RegExp('^'+request.term,'g');
    var arr=new Array();
            for(var i=0;i<names.length;i++)
    {
        var index=0;

        if(matcher.test(names[i])===true)              //not returning true
        {
            console.log("it is true");
            arr.push(names[i]);
        }
        else
        {
            console.log("not done");
        }
    }
    response(arr);
  }
});

在代码中,未返回true。为什么?

您需要删除正则表达式上的
g
标志,因为这会使正则表达式对象在一次搜索到下一次搜索时保持状态,并可能会把事情搞砸。在您特别使用正则表达式时,应该没有理由这样做

然后,为了获得进一步的帮助,您可能需要向我们展示您在这个永远不会返回true的数组中搜索的确切内容


当你开始获得匹配时,如果你试图累积所有匹配,您需要将
arr
变量的初始化移动到
for
循环之前,这样它就不会在
for
循环的每次迭代中重新初始化。

您需要删除正则表达式上的
g
标志,因为这会使正则表达式对象保持从一次搜索到另一次搜索的状态下一步可能会把事情搞砸。在您特别使用正则表达式时,应该没有理由这样做

然后,为了获得进一步的帮助,您可能需要向我们展示您在这个永远不会返回true的数组中搜索的确切内容


当您开始获取匹配项时,如果您试图累积所有匹配项,则需要将
arr
变量的初始化移动到
for
循环之前,这样它就不会在
for
循环的每次迭代中重新初始化。

如果您记录或调试
请求的内容。term
,你(和我们!:-)会更清楚


另外,我认为您需要移动
var arr=new Array()
之前<代码>var指数=0

如果您记录或调试
请求.term的内容,您(和我们!:-)会更清楚


另外,我认为您需要移动
var arr=new Array()
之前<代码>var指数=0可以删除。

选项“g”不会留下任何垃圾或状态。事实上,它对
test
@MarioRossi没有任何影响-for
.test()
声明:
与exec一样(或与之结合),在同一个全局正则表达式实例上多次调用的测试将超越上一个匹配。
如果OP的代码想要找到多个匹配项,这将导致问题。如果您没有说,我很难相信JavaScript会以这种方式运行,即使
测试的目标发生了变化它。@MarioRossi-对于
.exec()
来说也是一样的。他们只存储索引并从索引值开始下一次搜索-他们不跟踪字符串是否相同-这取决于开发人员是否正确使用
g
标志,这里不需要它,因此应该删除它。选项“g”不会留下任何垃圾或状态。事实上,它对
test
@MarioRossi没有任何影响-for
.test()
声明:
与exec一样(或与之结合),在同一个全局正则表达式实例上多次调用的测试将超越上一个匹配。
如果OP的代码想要找到多个匹配项,这将导致问题。如果您没有说,我很难相信JavaScript会以这种方式运行,即使
测试的目标发生了变化它。@MarioRossi-对于
.exec()
来说也是一样的。他们只存储索引,然后从索引值开始下一次搜索-他们不跟踪字符串是否相同-这取决于开发人员是否正确使用
g
标志,这里不需要它,所以应该删除它。我已经调试了请求,还有其他方法可以执行此任务,如jquery、gerp,但我不明白为什么for循环中的if语句没有返回true我已经调试了请求。term很好,还有其他方法可以执行此任务,如jquery、gerp,但我不明白为什么for循环中的if语句没有返回true
if(matcher.test(names[i])===true)