Tečka v RegExpu neodpovídá všem znakům v JavaScriptu

Před několika dny jsem mluvil na EnterJS a Brian Terlson přednesl vynikající keynote o ES2017 a budoucnosti JavaScriptu. Přednáška zahrnovala také připravované funkce regulárních výrazů, které mohou být přidány do specifikace v ES2017. Jednou z těchto nových funkcí je s nebo dotAll příznak pro regulární výrazy. Tak proč to potřebujeme?

Upravit:Příznak s (dotall) se dostal do sady funkcí EcmaScript 2018.

Ukázalo se, že . meta znak v regulárních výrazech neodpovídá všem znakům. Jste překvapeni? Já byl taky. Dovolte mi ukázat vám několik příkladů.

/a.b/.test('a\nb');     // false
/a.b/.test('a\rb');     // false
/a.b/.test('a\u2028b'); // false
/a.b/.test('a\u2029b'); // false

Problém s tímto neočekávaným chováním je, že může mít za následek těžko odhalitelné chyby. Návrh specifikace "dotall" zavádí nový /s příznak, který hodlá toto chování napravit.

/a.b/s.test('a\nb');     // true
/a.b/s.test('a\rb');     // true
/a.b/s.test('a\u2028b'); // true
/a.b/s.test('a\u2029b'); // true

Jaká je podpora prohlížeče příznaku dotAll? 👇

MDN Compat Data (zdroj)
Informace o podpoře prohlížeče pro příznak dotAll
62 62 79 78 78 11.1 11.1 8.0 62