generated at
正規表現のASTを編集する


この2つを使うと正規表現ASTにして、木構造を編集し、正規表現に戻せそう

ret
/./ \r\n になってしまう
それ以外は問題なさそう
継続的に開発されている
unret
3年ぐらい開発止まってるけど問題は無さそう?
コードがつらい
インデントじゃない所にtab文字があったりする
こっちは簡単だし、自分で書き直しても良さそうだshokai


retで作ったASTをunretで正規表現に戻す
range
* {0,}
+ {1,} になってしまう
意味は同じなんだけど元通りにしたい


どういう木構造を出すのか見る
retcli.js
const 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.js
module.exports = { ROOT : 0, GROUP : 1, POSITION : 2, SET : 3, RANGE : 4, REPETITION : 5, REFERENCE : 6, CHAR : 7, };