2017-07-15 12 views
2

下にそれぞれ挿入されたコードhttps://jsfiddle.net/1rgknpwq/を見ている人は誰ですか?私にとっては、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>

IE、クロム、Firefoxのように、右の結果falseを与えます。それにもかかわらず、最初のコードスニペットでは、Chrome、Firefox、IEではfalseが返されますが、引用されたEdgeバージョンではfalseになります。

引用エッジバージョンに問題があることを示すために、最小限のテストケースがhttps://jsfiddle.net/vx9dz8cw/あり、それはまた、何も見えない文字がその前に存在しないように、入力の最初の文字が符号<未満であることを確認します

我々は、入力した後、正規表現パターンコード(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>

が正常に動作します:

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>

+1

私の推測では、テスト文字列には '<'の前に文字が含まれていると思います。それを元に戻します: 'if(/^. sln

+0

Edge 38.14393.1066.0は、フィドルでもfalseを返します。 –

+0

reduce caseは予期しない動作を示していませんが、大文字小文字の問題ではありません。正規表現と入力文字列を減らして、まだその動作を示しているものを試してください。 – Bergi

答えて

0

私はエッジが使用するマイクロソフトChakraCoreのJavascriptエンジンにhttps://github.com/Microsoft/ChakraCore/issues/3366として問題を報告し、それは今も最新のスタンドアロンに含まれているすでに実装fixですでに既知のバグであることが判明そのエンジンのChakraCore 1.6をリリースし、将来のEdgeリリースに移行する必要があります。

関連する問題