【问题标题】: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);

    【讨论】:

    • 作为另一种方式,这也是有效的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多