Edge returns true for /^.+<\?xml/i.test('<?xml version="1.0"?><root/>') 有什么原因吗?
Is there any reason why Edge returns true for /^.+<\?xml/i.test('<?xml version="1.0"?><root/>')?
还有其他人看到代码 https://jsfiddle.net/1rgknpwq/ 分别插入下面 return 对 Edge 来说是真的吗?对我来说,Microsoft Edge 40.15063.0.0 确实如此。
var xml = '<?xml version="1.0"?><root/>';
var regex = /^.+<\?xml/i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "'): " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
似乎是个错误,不是吗?
根据评论,这里尝试进一步减少它:
var str = '<';
var regex = /^.</i;
var test = regex.test(str);
var result = 'Checking ' + regex + ".test('" + str + "'): " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
对于这种简化的情况,Edge 给出了正确的结果 false
,就像 IE、Chrome、Firefox。尽管如此,第一个代码片段为 Chrome、Firefox、IE 提供了错误,但对于引用的 Edge 版本却没有。
显示引用的 Edge 版本问题的最小测试用例是 https://jsfiddle.net/vx9dz8cw/,它还检查输入中的第一个字符是否为小于号 <
,因此没有它前面的不可见字符:
var xml = '<?';
var regex = /^.+<\?/i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "') with xml.charAt(0) being '" + xml.charAt(0) + "': " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
如果我们从输入和正则表达式模式中删除问号,则代码 (https://jsfiddle.net/vx9dz8cw/1/) 可以正常工作:
var xml = '<';
var regex = /^.+</i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "') with xml.charAt(0) being '" + xml.charAt(0) + "': " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
我将问题报告为 https://github.com/Microsoft/ChakraCore/issues/3366 on the Microsoft ChakraCore Javascript Engine that Edge uses and it turned out to be a already known bug with an already implemented fix,该问题现在也包含在该引擎的最新独立版本 ChakraCore 1.6 中,因此应该会出现在未来的 Edge 版本中。
还有其他人看到代码 https://jsfiddle.net/1rgknpwq/ 分别插入下面 return 对 Edge 来说是真的吗?对我来说,Microsoft Edge 40.15063.0.0 确实如此。
var xml = '<?xml version="1.0"?><root/>';
var regex = /^.+<\?xml/i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "'): " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
似乎是个错误,不是吗?
根据评论,这里尝试进一步减少它:
var str = '<';
var regex = /^.</i;
var test = regex.test(str);
var result = 'Checking ' + regex + ".test('" + str + "'): " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
对于这种简化的情况,Edge 给出了正确的结果 false
,就像 IE、Chrome、Firefox。尽管如此,第一个代码片段为 Chrome、Firefox、IE 提供了错误,但对于引用的 Edge 版本却没有。
显示引用的 Edge 版本问题的最小测试用例是 https://jsfiddle.net/vx9dz8cw/,它还检查输入中的第一个字符是否为小于号 <
,因此没有它前面的不可见字符:
var xml = '<?';
var regex = /^.+<\?/i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "') with xml.charAt(0) being '" + xml.charAt(0) + "': " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
如果我们从输入和正则表达式模式中删除问号,则代码 (https://jsfiddle.net/vx9dz8cw/1/) 可以正常工作:
var xml = '<';
var regex = /^.+</i;
var test = regex.test(xml);
var result = 'Checking ' + regex + ".test('" + xml + "') with xml.charAt(0) being '" + xml.charAt(0) + "': " + test;
console.log(result);
document.getElementById('result').textContent = result;
<section>
<h2>Test</h2>
<pre id="result"></pre>
</section>
我将问题报告为 https://github.com/Microsoft/ChakraCore/issues/3366 on the Microsoft ChakraCore Javascript Engine that Edge uses and it turned out to be a already known bug with an already implemented fix,该问题现在也包含在该引擎的最新独立版本 ChakraCore 1.6 中,因此应该会出现在未来的 Edge 版本中。