正規表現のASTを編集する
この2つを使うと正規表現をASTにして、木構造を編集し、正規表現に戻せそう ret
/./が\r\n になってしまう
それ以外は問題なさそう
継続的に開発されている
unret
3年ぐらい開発止まってるけど問題は無さそう?
コードがつらい
インデントじゃない所にtab文字があったりする
こっちは簡単だし、自分で書き直しても良さそうだshokai.icon
retで作ったASTをunretで正規表現に戻す
range
*が{0,}に
+が{1,}になってしまう
意味は同じなんだけど元通りにしたい
どういう木構造を出すのか見る
code:retcli.js
const ret = require('ret')
const args = process.argv.slice(2).join(' ')
console.log(JSON.stringify(ret(args), null, 2))
$ node retcli.js '^\[([^\\]+)\]$' code: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などが取れる
code:lib/types.js
module.exports = {
ROOT : 0,
GROUP : 1,
POSITION : 2,
SET : 3,
RANGE : 4,
REPETITION : 5,
REFERENCE : 6,
CHAR : 7,
};