【问题标题】:Regex: Split at Next Newline After Word正则表达式:在单词后的下一个换行符处拆分
【发布时间】:2013-11-04 18:17:12
【问题描述】:

我有这样的声明:

废话
废话
约翰做到了
废话
废话
约翰做到了
等等

我需要在以 John 开头的行末尾的换行符处拆分此文本。 John 之后的文本不一致,但最后一行始终以 John 开头。在“John”处拆分很容易,我只是不知道如何说“在 John 之后的下一个换行符处拆分”。

.split(/(.*?John*?\n)+/g)

当我希望它与上面的东西保持一致时,上面将它拆分为 John 成为它自己的条目。

编辑

输出应该是:

(废话
废话
约翰这样做了)
(废话
废话
约翰做到了)
(等等……

括号表示分割边界/单个数组条目。

【问题讨论】:

  • 你的预期输出是什么?
  • 请发布想要的结果,因为没有它很难提供帮助
  • @anubhava - 已编辑帖子。

标签: jquery regex split


【解决方案1】:

我认为它对你有用:

.split(/.+John.+\n/g)

. 任意元素

+ 1 次或多次

John

.+ 任何元素 1 次或多次

\n换行

g 全球。不要在第一次拆分时停止。

编辑

有了这个:.split(/(.*?John*?\n)+/g),你正在匹配:

.*任何元素0次以上

John*?John 0 次以上。 ? 在这里没有意义。

\n换行

所以在 John 或换行之后,除了 John 之外,这不匹配任何内容。

【讨论】:

    【解决方案2】:

    这应该可行:

    s = "blah\n" +
    "blah\n" +
    "John did this\n" +
    "blah\n" +
    "blah\n" +
    "John did that";
    
    m = s.match(/[\s\S]*?\bJohn\b[^\n]*/g);
    
    console.log(m);
    

    输出:

    ["blah
    blah
    John did this", "
    blah
    blah
    John did that"]
    

    【讨论】:

      【解决方案3】:

      我会这样做:

      var splitted = text.match(/[^]+?John.+\n/g);
      
      • [^]+? → 任何 char(但至少有一个 char)不情愿,以免消耗 John
      • .+\n → 每个字符都与 John 在同一行中

      正如@anubhava 建议的那样,您可以将[\s\S] 用于任何字符,如果您不使用正则表达式,例如Jonhy,则用\b 围绕John。如果要匹配空字符串,请将@​​987654328@ 替换为*,如果您不想包含新行,只需使用[^\n]+(除新行之外的所有字符)。


      Working Fiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        相关资源
        最近更新 更多