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,我认为它不需要初始化这个类。我也试过了,它会返回未定义的。