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();