2016-04-14 17 views
1

Ich habe einen regulären Ausdruck in node.js, der mit einigen seltsamen Dingen übereinstimmt. Schauen Sie sich diese:Seltsame Regex-Übereinstimmung node.js

var regex = new RegExp('(<\?%)|(%\?>)', 'g'); 
 
console.log('<tag><?%text%?></tag>'.match(regex));

führt zu [ '>', '%', '%', '>', '>' ] und ich verstehe nicht, warum.

Der Zweck war, <?% oder %?> zu entsprechen, und es funktioniert tadellos auf https://regex101.com/.

Antwort

3

Das ist, weil Sie \ nicht entkommen konnten. Es sollte \\ sein.

Drücken Ctrl +Umschalt +I, gehen in Console und den folgenden Code einzufügen.

var regex = new RegExp('(<\\?%)|(%\\?>)', 'g'); 
console.log('<tag><?%text%?></tag>'.match(regex)); 
+0

Nein; das ist nicht der richtige Weg, Regex zu tun. – SLaks

+0

@SLaks: Ihr Grund ist richtig. Ich habe gezeigt, warum der OP-Code nicht funktionierte, weil '\ 'nicht entkoppelt war. –

+1

Das funktioniert aber tatsächlich ... fehle ich etwas @SLaks? – brandonscript

2

Ihre Backslashes werden verschluckt.

Sie sollten einen regulären Ausdruck verwenden wörtlichen statt: /(<\?%)|(%\?>)/g

+0

Ihre Abzeichen brechen CSS. Sollte sich auf Meta informieren! –

+0

Ja, noob hat Recht, das ist wie ein Fehler. Auch da ist noch eine komische Sache. SLaks hat 500k rep und ich habe ihn nie hier gesehen. Wo warst du bis jetzt? ':-)' – Shafizadeh