我正在尝试编写正则表达式以匹配以下情况:
在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中尝试的测试中)
任何建议将不胜感激!
答案 0 :(得分:1)
您可以使用"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,''))