Betrachten Sie die folgende Unicode-schweren regulären Ausdruck (Emojis in Vertretung von Nicht-ASCII und extra BMP Zeichen):Abfolge logischer OR in ES6/Unicode regulären Ausdruck in Chrome ✗ vs Firefox ✓
''.match(/||/ug)
Firefox gibt [ "", "", "", "", "", "" ]
zurück.
Chrome 52.0.2743.116 und Knoten 6.4.0 beide zurück null
! Es scheint nicht zu kümmern, wenn ich die Zeichenfolge in eine Variable setzen und tun str.match(…)
, noch wenn ich ein RegExp-Objekt über new RegExp('||', 'gu')
erstellen.
(Chrome ist ok mit nur ORing zwei Sequenzen: ''.match(/|/ug)
ok Es ist auch in Ordnung, mit Nicht-Unicode. 'aakkzzkkaa'.match(/aa|kk|zz/ug)
funktioniert.)
Mache ich etwas falsch? Ist das ein Chrome-Bug? Die ECMAScript compatibility table sagt, dass ich mit Unicode-Regexps in Ordnung sein sollte.
(PS:..? Die drei Emoji in diesem Beispiel verwendet werden nur Doubles In meiner Anwendung, werden sie willkürlich, aber deutliche Strings sein Aber ich frage mich, ob die Tatsache, dass ''.match(/[]/ug)
Werke in Chrome relevant sind)
Vielleicht nur konservativ ich bin, aber das wäre einfacher zu lesen 'foo',' bar' und 'baz' oder' A', 'B' und' C'. Außerdem machen viele Schriftarten immer noch nicht alle Emojis. Wenn also jemand zwei von ihnen vermisst, werden sie beide als ein Quadrat sehen - oder schlimmer noch, alle drei. –
@CaptainMan die Welt spricht viele Sprachen, von denen viele mit Nicht-ASCII- oder (keuch!) Extra-BMP-Zeichen geschrieben sind. Ich verwende Emoji als Stehplatz für diese Charaktere. (Ich gebe auch in der Post an, dass das gleiche Beispiel mit ASCII arbeitet, also ist es ein Unicode-Problem.) Aktualisiere Titel, um Unicode zu betonen. –
Ich sehe jetzt Teil des Punktes war für Unicode (verpasste es zuerst). Ich denke immer noch, dass mehr "Vanille" Unicode-Charaktere besser wären als Emojis. –