Javascript 正则表达式在两个词中进行多重搜索

Javascript Regex multiple search in two words

我想将 Regex 和两个单词之间的结果传输到一个数组,但不幸的是我不能这样做。你能帮帮我吗?

在本文中

[row]
Row text1
[rowEnd]

[row]
Row text2
[rowEnd]

我会搜索这个内容,

[row]
(.*)
[rowEnd]

基于此我写了一个这样的正则表达式

/(\[row\]+)(.*)(\[rowEnd\])/gs

不过,这样取的是整体,不是一片片的。

预先感谢您的帮助。

在 Javascript 中,您可以使用

^\[row]\r?\n([^]*?)\r?\n\[rowEnd]
  • ^ 字符串开头
  • \[row]\r?\n 匹配 [row] 和一个换行符
  • ( 捕获 组 1
    • [^]*? 匹配 0+ 次任何字符,包括换行符非贪婪
  • ) 关闭组 1
  • \r?\n\[rowEnd]匹配一个换行符和[rowEnd]

Regex demo

const regex = /^\[row]\r?\n([^]*?)\r?\n\[rowEnd]/gm;
const str = `[row]
Row text1
[rowEnd]

[row]
Row text2
[rowEnd]`;

Array.from(str.matchAll(regex), m => console.log(m[1]));

没有正则表达式

  • "[row]"拆分数据。
  • 然后过滤那些以"[rowEnd]"结尾的字符串。
  • 最后从过滤后的字符串中删除 "[rowEnd]"

const 
  data = "[row]Row text1[rowEnd][row]Row text2[rowEnd]",
  res = data
    .split("[row]")
    .filter((s) => s.endsWith("[rowEnd]"))
    .map((s) => s.slice(0, -8));

console.log(res);