gpt4 book ai didi

javascript - 对于具有全局选项的模式,连续调用 RegExp 测试失败

转载 作者:可可西里 更新时间:2023-11-01 02:32:57 28 4
gpt4 key购买 nike

<分区>

我一整天都在为这个问题苦苦挣扎,我不知道是我做错了什么,还是我在 Chrome 的 JavaScript 引擎中发现了一个错误。似乎连续调用带有全局标志的 RegExp 对象会为相同的输入字符串返回不一致的结果。我正在测试以下功能:

function testRegex(pattern, array) {
document.writeln('Pattern = ' + pattern + ', Array = ' + array + '<br/>');
for (var ii = 0; ii < array.length; ii++) {
document.writeln(ii + ', ');
document.writeln(array[ii] + ', ');
document.writeln(pattern.test(array[ii]) + '<br />');
}
document.writeln('<br/>');
}

当我使用 /a/g 作为模式和各种字符串数组调用该函数时,我得到以下结果,据我所知,其中许多是不正确的:

// EXPECTED: True
// ACTUAL: True
testRegex(/a/g, ['a']);

// EXPECTED: True, True
// ACTUAL: True, False
testRegex(/a/g, ['a', 'a']);

// EXPECTED: True, True, True
// ACTUAL: True, False, True
testRegex(/a/g, ['a', 'a', 'a']);

// EXPECTED: True, False, True
// ACTUAL: True, False, True
testRegex(/a/g, ['a', 'b', 'a']);

// EXPECTED: True, True, True, True
// ACTUAL: True, False, True, False
testRegex(/a/g, ['a', 'a', 'a', 'a']);

// EXPECTED: True, False, False, True
// ACTUAL: True, False, False, True
testRegex(/a/g, ['a', 'b', 'b', 'a']);

当我使用相同的字符串数组调用相同的函数,但将 /a/ 作为模式传递时,实际结果都与预期结果匹配。

// EXPECTED: True
// ACTUAL: True
testRegex(/a/, ['a']);

// EXPECTED: True, True
// ACTUAL: True, True
testRegex(/a/, ['a', 'a']);

// EXPECTED: True, True, True
// ACTUAL: True, True, True
testRegex(/a/, ['a', 'a', 'a']);

// EXPECTED: True, False, True
// ACTUAL: True, False, True
testRegex(/a/, ['a', 'b', 'a']);

// EXPECTED: True, True, True, True
// ACTUAL: True, True, True, True
testRegex(/a/, ['a', 'a', 'a', 'a']);

// EXPECTED: True, False, False, True
// ACTUAL: True, False, False, True
testRegex(/a/, ['a', 'b', 'b', 'a']);

我已经为上面的代码创建了一个工作示例:http://jsfiddle.net/FishBasketGordo/gBWsN/

我错过了什么吗?无论模式是否是全局的,给定的字符串数组的结果都不应该相同吗?请注意,我主要在 Chrome 中工作,但我在 Firefox 4 和 IE 8 中观察到类似的错误结果。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com