【发布时间】:2021-01-06 01:42:13
【问题描述】:
这里是示例降价文件
# Test
## First List
* Hello World
* Lorem
* foo
## Second List
- item
## Third List
+ item 1
part of item 1
+ item 2
## Not a List
bla bla bla
## Empty
## Another List
bla bla bla
bla
* ITEM
## Nested List
### Inside Nested
* foo
* bar
到目前为止我有这个代码:
const markdown = await fs.promises.readFile(path.join(__dirname, 'test.md'), 'utf8');
const regexp = /^#{1,6} (.*)[.\n]*[*\-+] (.*)/gm;
const result = markdown.matchAll(regexp);
console.log([...result].map(m => m.slice(1)));
[
[ 'First List', 'Hello World' ],
[ 'Second List', 'item' ],
[ 'Third List', 'item 1' ],
[ 'Inside Nested', 'foo' ]
]
第一个问题是它只抓取第一个项目,第二个是如果项目是多行它只会抓取第一行,最后它不包括Another List,因为标题和列表之间有文本。
我对正则表达式很陌生,不确定我当前的正则表达式是否可以安全使用。
所以基本上我想找到markdown文件中的每个列表把它放在一个数组中然后看看上面是否有一个标题而不是另一个某种列表然后把那个标题放在那个数组的开头(所有人都认为不必一定是那种格式,也可以是对象,我只是认为数组会更简单)
想要的结果:
[
['First List', 'Hello World', 'Lorem', 'foo'],
['Second List', 'item'],
['Third List', 'item 1\npart of item 1', 'item 2'],
['Another List', 'ITEM'],
['Inside Nested', 'foo', 'bar']
]
【问题讨论】:
-
正则表达式对此并不好。您可以执行第二个正则表达式来拆分/解析列表值。或者你可以做一些硬编码到固定数量的贫民区条件组。
标签: javascript node.js regex typescript markdown