其他人看到代碼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