简单的脚本示例,它将 Markdown 文件中的所有一级标题(#
开头)转换为二级标题(##
开头),依此类推。
- 定义了一个正则表达式
headingsRegex
,用来匹配Markdown中的标题。正则表达式中的(^#{1,6})
匹配从一级到六级的标题,\s*
匹配标题后的空白字符,(.*)
匹配标题内容。 replaceHeading
函数接收匹配到的标题,计算其级别,并生成新的标题前缀,然后返回新的标题。- 使用
String.prototype.replace
方法和定义的替换函数来替换Markdown文本中的所有标题。
请注意,这个脚本是一个简单的示例,它假设Markdown文本格式良好,并且没有考虑嵌套标题或其他复杂情况。在实际使用中可能需要根据具体情况调整正则表达式和替换逻辑。
javascript
// 假设 markdownText 是你的Markdown文本内容let markdownText = `# 这是一级标题一些文本内容...## 这是二级标题一些文本内容...### 这是三级标题一些文本内容...`;// 使用正则表达式匹配所有的Markdown标题const headingsRegex = /(^#{1,6})\s+(.*)/gm;// 替换函数,将匹配到的标题提升一个级别function replaceHeading(match, prefix, content) {const level = prefix.length;const newPrefix = '#'.repeat(level + 1);return `${newPrefix} ${content}`;}// 替换Markdown文本中的所有标题markdownText = markdownText.replace(headingsRegex, replaceHeading);console.log(markdownText);
一种创建 n 个元素数组的方法
使用 String.prototype.repeat
,创建字符串,再分割为数组。其实写起来跟用 Array.from 也差不多,不会节省多少代码
js
`1`.repeat(10).split("");
js
Array.from({length:10});
负向先行断言
使用负向先行断言(negative lookahead)可以实现匹配以#
开头但#
前面不能有空格的Markdown标题。负向先行断言的语法是 (?!...)
,其中...
是我们要排除的模式。
下面是使用负向先行断言的正则表达式,用于匹配Markdown标题:
^(?!\s)(#{1,6})(.*)
这个正则表达式的组成部分解释如下:
^
表示行的开始。(?!\s)
是负向先行断言,表示#
前面不能有空格字符。(#{1,6})
表示匹配1到6个#
字符,对应Markdown中的一级到六级标题。(.*)
表示匹配任意数量的任意字符,直到行尾。
在Node.js中使用这个正则表达式来匹配Markdown文件中的标题:
javascript
const fs = require('fs');const path = require('path');// 使用负向先行断言的正则表达式匹配Markdown标题const headerRegex = /^(?!\s)(#{1,6})(.*)$/gm;// 读取Markdown文件内容const markdownFilePath = path.join(__dirname, 'path/to/your/markdown.md');fs.readFile(markdownFilePath, 'utf8', (err, markdownContent) => {if (err) {console.error('Error reading file:', err);return;}// 使用正则表达式匹配所有标题const headers = markdownContent.match(headerRegex);if (headers) {headers.forEach((header, index) => {// 移除行首的#和空格,获取标题文本const trimmedHeader = header.replace(/^(#+)[ \t]?/, '');console.log(`Title ${index + 1}: ${trimmedHeader}`);});} else {console.log('No headers found.');}});
请注意,在JavaScript中,正则表达式的某些字符需要被转义,例如括号()
和感叹号!
。在上面的代码中,我使用了(?!\s)
来转义这些字符。然而,实际上在JavaScript正则表达式中,你只需要使用(?!\s)
即可,不需要额外的转义。
将'path/to/your/markdown.md'
替换为你的Markdown文件的实际路径。这段代码会读取Markdown文件,使用正则表达式匹配所有符合要求的标题,并打印出它们的文本内容。