2016-08-09 60 views
0

Ich versuche, Regexes (/ komplexe regex here /) von Division (/) in einer JavaScript-Datei zu unterscheiden, indem Sie es als Puffer in Node .js und gehen nacheinander durch die Zeichen. Der GrundUnterscheiden Regexes von einem Schrägstrich (Division) in einem JavaScript-Dateien mit Node.js

const fs = require('fs'); 
const buf = fs.readFileSync('sample.js'); 
const slash = '/'.codePointAt(0); 
const backSlash = '\\'.codePointAt(0); 
let escaped = false; 
for(let key of buf.keys()) { 
    if(buf[key] === slash && !escaped) { 
     // How do I distinguish this slash? Is it a regex or is it a division sign? 
    } 
    if(escaped) { 
     escaped = false; 
    } else if(buf[key] === backSlash) { 
     escaped = true; // set escaped to true to ignore the next character. 
    } 
} 

Es sind keine Kommentare in der Datei so muss ich nicht über //, /* oder */

Sorge Wie soll ich zwischen einem Divisionszeichen und einer regex unterscheiden?

+1

Es ist einfacher, nur einen Parser zu verwenden, z.B. Esprima. – gcampbell

+0

Verwenden Sie eine Parser-Bibliothek wie Eichel oder Esprima; es ist kein Problem, das durch reguläre Ausdrücke entschieden werden kann. – Kovensky

Antwort

0

Verwenden Sie die tokenizer Merkmal Esprima:

var esprima = require('esprima'); 
var tokens = esprima.tokenize('var regex = /foo/bar; var math = 1/2'); 
console.log(tokens); 

und Sie werden die folgende Ausgabe haben:

[ { type: 'Keyword', value: 'var' }, 
    { type: 'Identifier', value: 'regex' }, 
    { type: 'Punctuator', value: '=' }, 
    { type: 'RegularExpression', 
    value: '/foo/bar', 
    regex: { pattern: 'foo', flags: 'bar' } }, 
    { type: 'Punctuator', value: ';' }, 
    { type: 'Keyword', value: 'var' }, 
    { type: 'Identifier', value: 'math' }, 
    { type: 'Punctuator', value: '=' }, 
    { type: 'Numeric', value: '1' }, 
    { type: 'Punctuator', value: '/' }, 
    { type: 'Numeric', value: '2' } ] 

Wie Sie sehen können, identifiziert die tokenizer richtig die ersten beiden Schrägstriche als Teil ein regulärer Ausdruck und der letzte als Divisionsoperator.