JavaScriptコードをトークンに分解する正規表現

JavaScriptコードをトークンに分解する正規表現

by polygonplanet

HTML

<div><textarea id="input"></textarea></div>
<div><button type="button" id="execute">execute</button></div>
<div><textarea id="output"></textarea></div>

CSS

textarea {
    width: 98%;
    min-height: 220px;
}

JavaScript

function hoge() {
    var pattern = /(\/\*[\s\S]*?\*\/|\/{2,}[^\r\n]*(?:\r\n|\r|\n|)|"(?:\\[\s\S]|[^"\r\n\\])*"|'(?:\\[\s\S]|[^'\r\n\\])*'|(?:(?:\/(?!\*)(?:\\.|[^\/\r\n\\])+\/)(?:[gimy]{0,4}|\b)(?=\s*(?:(?!\s*[\/\\<>*+%`^"'\w$-])[^\/\\<>*+%`^'"@({[\w$-]|===?|!==?|\|\||[&][&]|\/[*\/]|[,.;:!?)}\]\r\n]|$)))|<([^\s>]*)[^>]*>[\s\S]*?<\/\2>|>>>=?|<<=|===|!==|>>=|\+\+(?=\+)|\-\-(?=\-)|[=!<>*+\/&|^-]=|[&][&]|\|\||\+\+|\-\-|<<|>>|0(?:[xX][0-9a-fA-F]+|[0-7]+)|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|[1-9]\d*|[-+\/%*=&|^~<>!?:,;@()\\[\].{}]|(?![\r\n])\s+|(?:\r\n|\r|\n)|[^\s+\/%*=&|^~<>!?:,;@()\\[\].{}'"-]+)/g;

$('#execute').click(function() {
    var code = $('#input').val();
    var tokens = code.match(pattern);
    $('#output').val(tokens.join('\n-----\n'));
});
}

$('#input').val(hoge.toString());

hoge();