Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式失败_Javascript_Regex - Fatal编程技术网

Javascript正则表达式失败

Javascript正则表达式失败,javascript,regex,Javascript,Regex,我正在使用以下javascript正则表达式: var pattern = new RegExp("^" + term + ".*") console.log(pattern.toSource()); console.log(first_name + " : " + pattern.test(first_name) ); 我想让它做的就是检查这个人的名字是否以给定的搜索词开头。例如,如果搜索词是“a”,则所有以a开头的名字都应该匹配,例如:andy、alice等。如果是al,则只有alice应

我正在使用以下javascript正则表达式:

var pattern = new RegExp("^" + term + ".*")
console.log(pattern.toSource());
console.log(first_name + " : " + pattern.test(first_name) );
我想让它做的就是检查这个人的名字是否以给定的搜索词开头。例如,如果搜索词是“a”,则所有以a开头的名字都应该匹配,例如:andy、alice等。如果是al,则只有alice应匹配,等等。但输出为:

/^a.*/
Alyssa : false

我做错了什么?

正则表达式区分大小写。所以
alysa
不匹配,因为
A
A
是不同的符号。 您可能希望使用不区分大小写的正则表达式匹配:

var pattern = new RegExp("^" + term + ".*", "i")
console.log(pattern.toSource());
console.log(first_name + " : " + pattern.test(first_name) );

您可以将正则表达式指定为不区分大小写,这样
a
将同时匹配
a
a

 var pattern = new RegExp("^" + term + ".*", "i");

使您的
RegExp
不区分大小写:

var pattern = new RegExp("^" + term + ".*", "i");
请参阅。

您的正则表达式区分大小写,因此不匹配。请在代码中添加此行:

pattern.ignoreCase = true;

它不起作用的原因是正则表达式区分大小写<代码>A不是
A

其他你做错的事情:

  • 费心说“后面跟零个或多个字符”,这是多余的
  • 当一个简单的子字符串检查可以完成任务时,使用正则表达式
我会这样做:

console.log(
    first_name + " : " + 
    (first_name.toLowerCase().indexOf(term.toLowerCase()) === 0)
);

没有问题,应该使用以下命令使RegExp不区分大小写

var pattern = new RegExp("^" + term + ".*","i")

要匹配您的名称,只要您希望使测试不区分大小写,或者使用类似于
/^[aA]./

的匹配项,
a
a
不同。。。不需要获得
*
,顺便说一句。这样做:
var模式=/^a/i
var模式=/^[aA]/错误的问题标题-regexp正在执行它被告知的操作。regexp比substring快,不是吗?另外,
indexOf
如果在字符串中的任何位置找到字符串(与刚开始时相比),将返回true,不是吗?这似乎不太可能,尤其是如果必须动态构造正则表达式。我必须确定它的基准。而否,
indexOf
从不返回
true
false
。如果它返回
0
(这是我的示例检查的内容),那么它在索引0处找到了匹配项,索引0是第一个字符。