用于匹配 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" : [
出现并在下一个 ]
处停止
我得到了类似的东西:/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,''))
我正在尝试编写一个正则表达式来匹配以下情况:
在一个 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" : [
出现并在下一个]
处停止
我得到了类似的东西:/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,''))