2016-08-09 2 views
0

JavaScriptファイル内の正規表現(/複雑な正規表現は/)を除算(/)と区別するために、Node .jsと1つずつ文字を歩いています。Node.jsを使用したJavaScriptファイルの正規表現と区切り

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. 
    } 
} 

は、ファイルにはコメントはありません理由は、そう私は約///*、または*/を心配する必要はありません

私は除算記号と正規表現を区別する必要がありますどのように?

+1

パーサーを使用するだけで簡単です(例:エスピリマ。 – gcampbell

+0

acornやesprimaのようなパーサーライブラリを使用します。正規表現では決定的に問題ではありません。 – Kovensky

答えて

0

Esprimaのトークナイザ機能を使用します

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

を、あなたは次のような出力があります:あなたが見ることができるように

[ { 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' } ] 

を、トークナイザが正しくの一環として、最初の2つのスラッシュを特定正規表現、最後は除算演算子です。

関連する問題