Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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,我有一个奇怪的情况。我正在使用正则表达式测试一些字符串。我想将它们封为一个类,如下所示: export class RegexPattern { static price = (/^\d*(\.\d{1,2})?$/g); static phone = (/^([0-9]{0,5}-)?[0-9]{10}$/g); } 假设输入是'32' 但是,当我使用它两次测试相同的字符串时,第一次将通过,第二次将失败,例如: RegexPattern.price.test('32') //ret

我有一个奇怪的情况。我正在使用正则表达式测试一些字符串。我想将它们封为一个类,如下所示:

export class RegexPattern {
  static price = (/^\d*(\.\d{1,2})?$/g);
  static phone = (/^([0-9]{0,5}-)?[0-9]{10}$/g);
}
假设输入是
'32'

但是,当我使用它两次测试相同的字符串时,第一次将通过,第二次将失败,例如:

RegexPattern.price.test('32')  //return ture
RegexPattern.price.test('32')  // return false
但如果我使用裸正则表达式,不密封:

(/^\d*(\.\d{1,2})?$/g).test('32')  //return ture
(/^\d*(\.\d{1,2})?$/g).test('32')  // return true

我的问题是为什么会发生这种情况?

RegExp对象跟踪匹配发生的位置,因此在后续的匹配中,它将从上次使用的索引开始,而不是从0开始

如果您不想在每次测试后手动将
lastIndex
重置为0,只需删除
g
标志

当您单独测试regex时,实际上每次调用都会创建一个新的regexp对象,这就是为什么它可以工作的原因。如果你正在做:

'use strict';

const regex = /^\d*(\.\d{1,2})?$/g;

console.log(regex.test(32));
console.log(regex.test(32));

你会得到
true
false

也许你需要先实例化这个类,比如const regexpatern=new regexpatern()@Joven28,我认为它不需要初始化这个类。我也试过了,它会返回未定义的。