其他人看到代码https://jsfiddle.net/1rgknpwq/分别插入下面返回true与Edge?对我来说,它具有Microsoft Edge 40.15063.0.0。为什么Edge为/^.+<?xml/i.test('<?xml version =“1.0”?><root/>')返回true是否有任何理由?
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>
对于减少的情况下,边缘给出正确的结果false
,如IE,Chrome浏览器,Firefox浏览器。尽管如此,第一个代码片段让我对Chrome,Firefox,IE,而不是引用的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>
我的猜测是测试字符串在'<之前包含一个字符。将它缩小为raw:'if(/^.。test('<'')'...这是最基本的了 – sln
Edge 38.14393.1066.0即使在小提琴中也会返回false –
如果减少case不会显示意外的行为,这不是一种情况,对于这个问题无关紧要,请尽量减少正则表达式和输入字符串,以使其仍然表现出行为 – Bergi