下にそれぞれ挿入されたコード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>
私の推測では、テスト文字列には '<'の前に文字が含まれていると思います。それを元に戻します: 'if(/^.。test( '<'') '...これは基本的なものです。 – sln
Edge 38.14393.1066.0は、フィドルでもfalseを返します。 –
reduce caseは予期しない動作を示していませんが、大文字小文字の問題ではありません。正規表現と入力文字列を減らして、まだその動作を示しているものを試してください。 – Bergi