用于匹配 HTML 内 JSON 片段的字母数字 ID 列表的正则表达式

Regex to match a list of alphanumeric ids of a JSON fragment inside HTML

我正在尝试编写一个正则表达式来匹配以下情况:

在一个 Node.js 项目中,我有一个多行字符串,其中包含一个大的 HTML 代码和一些具有这种结构的 JS:

<html>
  <head>
  </head>
  <body>
    <script type="text/javascript">
      ... more code ...
      },
      "bookIds" : [
        "abc123",
        "qwe456",
        "asd789"
      ],
      ... more code, and in another json:
      },
      "bookIds" : [
        "foo111",
        "bar222",
        "baz333"
      ],
      ... more code ...
    </script>
  </body>
</html>

我的目标是获取第一个 bookIds 列表:

abc123
qwe456
asd789

因此,如您所见,我目前正在处理的条件是:

我得到了类似的东西:/bookIds" : \[([\S\s]*?)\]/。是的,从概念上讲,我虽然要找到第一个字符串 bookIds,然后在第一个 [ 之后开始,然后在下一个 ] 之前停止,但我不知道该怎么做。我现在正在获取有关先行和后行的文档。

但不幸的是,我已经用谷歌搜索和尝试了几个小时,但我没有让它工作(无论是在我的 Node 项目中还是我在 regex101.com 中尝试的测试)

如有任何建议,我们将不胜感激!

您可以使用 "bookIds"\s*:\s*\[([^\]]+?)] Demo

let str = `<html>
  <head>
  </head>
  <body>
    <script type="text/javascript">
      "bookIds" : [
        "abc123",
        "qwe456",
        "asd789"
      ],
      "bookIds" : [
        "foo111",
        "bar222",
        "baz333"
      ],
    <\/script>
  <\/body>
<\/html>`

let op = str.match(/"bookIds"\s*:\s*\[([^\]]+?)]/m)
console.log(op[1].replace(/[\s"]+/g,''))