【问题标题】:Javascript Regex multiple search in two words [duplicate]Javascript Regex在两个单词中多次搜索[重复]
【发布时间】:2021-07-25 01:31:43
【问题描述】:
我想将正则表达式和两个单词之间的结果传输到一个数组中,但不幸的是我不能这样做。你能帮帮我吗?
在本文中
[row]
Row text1
[rowEnd]
[row]
Row text2
[rowEnd]
我会搜索这个内容,
[row]
(.*)
[rowEnd]
基于此,我编写了一个这样的正则表达式
/(\[row\]+)(.*)(\[rowEnd\])/gs
但是,这种方式需要的是整体,而不是一块一块的。
提前感谢您的帮助。
【问题讨论】:
标签:
javascript
regex
regex-lookarounds
【解决方案1】:
在 Javascript 中,您可以使用
^\[row]\r?\n([^]*?)\r?\n\[rowEnd]
-
^ 字符串开始
-
\[row]\r?\n 匹配 [row] 和换行符
-
( 捕获第 1 组
-
[^]*? 匹配 0+ 次任何字符,包括换行符非贪婪
-
)关闭第一组
-
\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]));
【解决方案2】:
没有正则表达式
- 按
"[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);