4

私の理解では、これは

/[\d-X]/

標準では許可されていません。

抽象操作 CharacterRange は、2つの CharSet パラメーター A および B を取り、次のことを実行します。.io/#x15.10.2.15 )

ただし、一部の(ほとんどの?)ブラウザ-は、エスケープが前後にある場合、序数文字として扱います。そのため、上記は数字、ダッシュ、および X に一致します。

var re = /[\d-X]/g;

for(var i = 0, r = ""; i < 0x10000; i++) {
    var s = String.fromCharCode(i);
    if(!s.replace(re, ''))
        r += s;
}
console.log(r) // -0123456789X

質問:

  • この動作はすべてのエンジンで観察できますか? (最新の Webkit と Firefox をテストしました)
  • 彼らが標準に違反することを決定した理由の説明はありますか (ドキュメント、ソース、メーリング リストなど)?
4

1 に答える 1

4

標準の15.10.2.16 NonemptyClassRangesNoDashの下の注 3がそれに答えると思います。

- 文字は文字通りに扱うことも、範囲を表すこともできます。それが ClassRanges の最初または最後の文字、範囲指定の開始または終了制限、または範囲指定の直後である場合、文字どおりに扱われます。

この場合、 が当てはまると思いimmediately follows a range specificationます。

その他の例:[a-f-h] [\s--9] [\w\d-\s]

于 2013-06-25T10:47:29.867 に答える