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

时间:2018-11-02 19:02:08

标签: javascript node.js regex

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

<?php

require_once __DIR__.'/../vendor/autoload.php';

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}



$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

 $app->withFacades();

 $app->withEloquent();


$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);


 $app->routeMiddleware([
     'auth' => App\Http\Middleware\Authenticate::class,
 ]);



$app->register(Laravel\Passport\PassportServiceProvider::class);
$app->register(Dusterio\LumenPassport\PassportServiceProvider::class);



$app->router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) {
    require __DIR__.'/../routes/web.php';
});

return $app;

我需要它给我一些看起来像这样的JSON:

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

# Creating new contexts

<!-- @[UsageExample] -->

## Usage example

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

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

<!-- @[ArticleSection] -->

我希望所有这些都不会有所帮助,更好的细节还可以。我正在努力的部分是研究如何确定[ { "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)] -->

之间的内容

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

1 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式捕获您在帖子中提到的每一个数据,并使用它们来创建您自己在帖子中提到的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(命名组版本)