在markdown代码块

时间:2018-01-19 05:06:39

标签: javascript node.js regex

我有以下字符串。

**Template:**
```
**label**: test
**label2**: test
**label3**: test
```

在``````有'标签'里面和正则表达式我想选择那些标签:

[label1, label2, label3]

然后检查另一个相似的字符串,

**Template:**
```
**label**: Something here
**label2**: Something there.
**label3**: Something everywhere.
```

检查上面的字符串是否包含该数组的所有内容。 **并不重要,但检查它是否也有**(但在单独的方法中)

我尝试了什么:

([/\*(*?)\*/])\w+

它选择文本,但也选择文本后面的星号。 *label,也没有说明我需要选择代码块之间的所有内容。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我在这里使用两个正则表达式。

首先:

/\`{3}([\s\S]*)\`{3}/g

获取代码块,即包含在(```)三个反引号中的内容。

第二

/\*{2}(.*)\*{2}/gm

从代码块中获取标签,即包含在(***)两颗星内的内容。

另请注意,下面的代码段中的代码假定只有一个代码块,可以包含多个标签。如果您正在处理多个代码块,则可以使用while (matchCode ) { ... }部分处理该方案,然后在每个代码块中搜索标签。

var str = document.getElementById("myDiv").innerText;

// console.log(str);

var labels = [];

// Get the content between the ``` backticks
var regexCode = /\`{3}([\s\S]*)\`{3}/g;

// Note: Generalize this if you expect there to be multiple blocks of code.
var matchCode = regexCode.exec(str);
var codeText= matchCode[1];
console.log("Content inside code block: ", codeText);

// Get the labels.
var regexLabels = /\*{2}(.*)\*{2}/gm;
var matchLabel = regexLabels.exec(codeText);
while(matchLabel) {
  labels.push(matchLabel[1]);

  matchLabel = regexLabels.exec(codeText);
}

console.log("Labels: ", labels);
<pre id="myDiv">
**Template:**
```
**label**: test
**label2**: test
**label3**: test
```
</pre>