javascript - 尝试从两组字符之间提取数据

标签 javascript node.js regex

我正在尝试以可用的方式从文本文件中提取一些数据,但是我无法完全找出正确的方法。原始文本文件如下所示:

<!-- @[Hero(super)] -->

# Creating new contexts

<!-- @[UsageExample] -->

## Usage example

```javascript
  Import { ICON_NAME } from 'Icons'
```

<!-- @[/Hero] -->

<!-- @[ArticleSection] -->

我需要它给我一些如下所示的 JSON:

[
  {
    "name": "Hero",
    "type": "super",
    "h1" "Creating new contexts"
  },
  {
    "name": "UsageExample",
    "h2" "Usage example",
    "codeType": "JavaScript",
    "code": "Import { ICON_NAME } from 'Icons'",
    "parent": "Hero"
  }
]

我并不期待所有的帮助,更详细的细节就可以了。我正在努力解决的部分是弄清楚如何确定 <!-- @[Hero(super)] --> 之间的内容和<!-- @[/Hero] -->

tl;dr:我正在寻找一种方法来提取 <!-- @[Hero(super)] --> 之间的文本和<!-- @[/Hero] -->

最佳答案

您可以使用此正则表达式来捕获您在帖子中提到的每一个数据,使用它您可以创建您自己的 JSON,如您在帖子中提到的那样。

(?s)<!-- @\[(\w+)\((\w+)\)\] -->\s+# ([\w ]+?)\s+<!-- @\[(\w+)\] -->\s+## ([\w ]+?)\s+```(\w+)\s+(.*?)```\s+<!-- @\[\/(\w+)\] -->

上述正则表达式的命名组版本,

(?s)<!-- @\[(?<name>\w+)\((?<type>\w+)\)\] -->\s+# (?<h1>[\w ]+?)\s+<!-- @\[(?<name2>\w+)\] -->\s+## (?<h2>[\w ]+?)\s+```(?<codeType>\w+)\s+(?<code>.*?)```\s+<!-- @\[\/(?<parent>\w+)\] -->

这里有两个名称,并且组名称不能重复,因此第二个名称为 name2。

  • (?s) 这使点能够匹配新行,这将帮助您捕获多行数据

  • 正则表达式的其余部分基本上将您想要的数据捕获到您可以在 regex101 演示中看到的各个组中。

演示,

https://regex101.com/r/VUkRiJ/2

https://regex101.com/r/VUkRiJ/3 (命名组版本)

关于javascript - 尝试从两组字符之间提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124433/

相关文章:

javascript - d3.select 不适用于特殊字符

javascript - 使用 npm 发布 es6 和 es5 源代码

c# - 有没有办法让一个角色成为两场比赛的一部分,而不仅仅是一场

java - 正则表达式在之前或之后匹配字符串,并且每组仅返回一个匹配项

javascript - 根据变量使 ng-click 调用某个方法

javascript - Z-index 查找元素的堆叠上下文

javascript - 使用 HTML5 Canvas 进行真正的等距投影

node.js - 蒙哥错误: failed to connect to serve on first connect in mongoDB atlas

javascript - Node.js API函数是否在单独的线程中执行

java - 使用正则表达式和 Java 搜索多行字符串中的字符串