一个正则匹配的面试题

题目描述

抽取 markdown 中的关键字符串 :::demo 和 ::: 里面的内容,返回匹配到的数组

// demo.md
# demo
::: demo
<template>
  <div class="box-vuea">Vue {{ message2 }}</div>
</template>
<script>
export default {
  data: () => ({ message2: 'Hello World 2' })
}
</script>
<style>
.box-vuea { color: blue; }
</style>
:::

::: demo
<template>
  <div class="box-vuea">Vue {{ message2 }}</div>
</template>
<script>
export default {
  data: () => ({ message2: 'Hello World 2' })
}
</script>
<style>
.box-vuea { color: blue; }
</style>
:::

题目来源及自己的思路

我写了两个都不适合,不知道哪里错了

/::: demo[^(:::)]*:::/g 

返回 null

/::: demo[\s\S]*:::/g 

返回了整个大段 '::: demo (片段1) ::: (...) ::: demo (片段2) :::'

你期待的结果是什么?实际看到的错误信息又是什么?

我想要返回:

[
    '::: demo (片段1) ::: ',
    '::: demo (片段2) ::: '
]
阅读 3k
3 个回答
(:::\s\w+\n[\s\S]+?\n:::)

这样用就行了:

var reg = new RegExp(/::: demo([\s\S]*):::/g);
reg.exec(str);    // str 为去要匹配的字符串

console.log(RegExp["$1"]);
console.log(RegExp["$2"]);

了解一下用法:https://developer.mozilla.org...
clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用