正規表現のASTを編集する
この2つを使うと
正規表現を
ASTにして、木構造を編集し、正規表現に戻せそう
ret
/./
が \r\n
になってしまう
それ以外は問題なさそう
継続的に開発されている
unret
3年ぐらい開発止まってるけど問題は無さそう?
コードがつらい
インデントじゃない所にtab文字があったりする
こっちは簡単だし、自分で書き直しても良さそうだ

retで作ったASTをunretで正規表現に戻す
range
*
が {0,}
に
+
が {1,}
になってしまう
意味は同じなんだけど元通りにしたい
どういう木構造を出すのか見る
retcli.jsconst ret = require('ret')
const args = process.argv.slice(2).join(' ')
console.log(JSON.stringify(ret(args), null, 2))
$ node retcli.js '^\[([^\[\]]+)\]$'
result(json){
"type": 0,
"stack": [
{
"type": 2,
"value": "^"
},
{
"type": 7,
"value": 91
},
{
"type": 1,
"stack": [
{
"type": 5,
"min": 1,
"max": null,
"value": {
"type": 3,
"set": [
{
"type": 7,
"value": 91
},
{
"type": 7,
"value": 93
}
],
"not": true
}
}
],
"remember": true
},
{
"type": 7,
"value": 93
},
{
"type": 2,
"value": "$"
}
]
}
type: 7
の value
の数字はasciiコード
String.fromCharCode
で文字に戻せる
token type
import {types} from 'ret'
で type.CHAR
などが取れる
lib/types.jsmodule.exports = {
ROOT : 0,
GROUP : 1,
POSITION : 2,
SET : 3,
RANGE : 4,
REPETITION : 5,
REFERENCE : 6,
CHAR : 7,
};