Javascript 在Regex.test之后执行Regex.exec时出现意外行为
我想知道我在正则表达式中遇到的行为背后的原因 这是节点REPL中的一个复制Javascript 在Regex.test之后执行Regex.exec时出现意外行为,javascript,regex,node.js,Javascript,Regex,Node.js,我想知道我在正则表达式中遇到的行为背后的原因 这是节点REPL中的一个复制 > const BRACKET_ENDING = /[\)\}\]]/g; undefined > char = ']' ']' > BRACKET_ENDING.test(char) true > BRACKET_ENDING.exec(char) null > BRACKET_ENDING.exec(char) [ ']', index: 0, input: ']' ] 当我在Rege
> const BRACKET_ENDING = /[\)\}\]]/g;
undefined
> char = ']'
']'
> BRACKET_ENDING.test(char)
true
> BRACKET_ENDING.exec(char)
null
> BRACKET_ENDING.exec(char)
[ ']', index: 0, input: ']' ]
当我在
Regex.test()
之后执行Regex.exec()
时,第一次的结果是null
。当我再次运行Regex.exec()
时,返回了预期值。我遗漏了什么?指示从何处开始搜索。每次调用exec
或test
,都会推进此索引,下一次调用将从那里开始。指示从何处开始搜索。每次调用exec
或test
,都会推进此索引,下一次调用将从那里开始。指示从何处开始搜索。每次调用exec
或test
,都会推进此索引,下一次调用将从那里开始。指示从何处开始搜索。每次调用exec
或test
,它都会推进此索引,下一次调用将从那里开始。在这种情况下,由于test
匹配整个输入,因此没有剩余的exec
可匹配,因此exec
失败,但也会重置lastIndex
,因此,当您再次执行exec
时,它现在可以匹配。当g
标志不存在时,lastIndex
属性在每次搜索后保持为0。在我的例子中,我不得不停止使用不必要的g
标志使其工作。在这种情况下,由于test
匹配整个输入,因此没有剩余的内容可供exec
匹配,因此exec
失败,但也会重置lastIndex
,因此当您再次执行exec
时,现在它可以匹配了。当g
标志不存在时,lastIndex
属性在每次搜索后保持为0。在我的例子中,我不得不停止使用不必要的g
标志使其工作。在这种情况下,由于test
匹配整个输入,因此没有剩余的内容可供exec
匹配,因此exec
失败,但也会重置lastIndex
,因此当您再次执行exec
时,现在它可以匹配了。当g
标志不存在时,lastIndex
属性在每次搜索后保持为0。在我的例子中,我不得不停止使用不必要的g
标志使其工作。在这种情况下,由于test
匹配整个输入,因此没有剩余的内容可供exec
匹配,因此exec
失败,但也会重置lastIndex
,因此当您再次执行exec
时,现在它可以匹配了。当g
标志不存在时,lastIndex
属性在每次搜索后保持为0。在我的例子中,我不得不停止使用不必要的g
标志来使它工作。