用于提取每个字母数字模式的正则表达式

Regex to extract each alphanumeric pattern

我有如下字符串

19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit

我如何编写一个正则表达式来给我这两个单独的字符串

19990101 - John DoeLorem ipsum dolor sit amet

19990102 - Elton Johnconsectetur adipiscing elit

我写的正则表达式可以做到这一点

/\d+ -/gm

Image

但我不知道如何将字母也包含在那里

Image2

您可以使用

const text = '19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit';
console.log(text.match(/\d+\s+-[A-Za-z0-9\s]*[A-Za-z]/g))
console.log(text.split(/(?!^)\s+(?=\d+\s+-)/))

text.match(/\d+\s+-[A-Za-z0-9\s]*[A-Za-z]/g) 方法是 \d+\s+- 模式之后提取 alphanumeric/whitespace 个字符。 详情:

  • \d+ - 一位或多位数字
  • \s+ - 一个或多个空格
  • - - 一个连字符
  • [A-Za-z0-9\s]* - 零个或多个字母数字或空白字符
  • [A-Za-z] - 一封信

text.split(/(?!^)\s+(?=\d+\s+-)/) 拆分方法在一位或多位数字前用一个或多个空格 + 一个或多个空格 + -:

拆分字符串
  • (?!^) - 不在字符串的开头
  • \s+ - 一个或多个空格
  • (?=\d+\s+-) - 与紧跟一个或多个数字 + 一个或多个空格 + -.
  • 的位置匹配的正先行

对于 OP 的用例,基于正则表达式的 split like with ... str.split(/(?<=\w)\s+(?=\d)/) ... 已经应该这样做了。

正则表达式使用 lookarounds,这里试图匹配任何空格(序列)/\s+,它由一个词/\w 引导/(?<= ... ) 并且是后跟/(?= ... ) 一个数字/\d 字符。

console.log(
  '19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit 19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit'
    .split(/(?<=\w)\s+(?=\d)/)
);