【问题标题】:Regex: match anything but a group正则表达式:匹配除组之外的任何内容
【发布时间】:2020-01-10 20:45:40
【问题描述】:

我的文本格式如下:

(delimiter)
111111
(delimiter)
222222
(delimiter)
333333
(delimiter)

其中(分隔符)是一个字符组,而 111111,222222,333333 - 一些随机文本,不包括(分隔符)组。

有没有办法写一个像“(分隔符)anything,but a delimiter>(分隔符)”这样的正则表达式?

我希望像这样捕获组:

"(delimiter)
111111
(delimiter)",

"(delimiter)
222222
(delimiter)",

"(delimiter)
333333
(delimiter)"

更具体地说, 在我的情况下,分隔符是([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]) 我尝试像这样使用负前瞻:

(([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s])(?!([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]))([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]))

但这似乎对我不起作用。

【问题讨论】:

  • 你使用任何编程语言吗?
  • @JBone,我想用javascript写脚本
  • 好的,这很容易。让我写吧
  • 分隔符是字符串还是单个字符?如果是单个字符,请使用[^X]*,其中X 是字符。
  • 显示您的尝试,我们会帮助您解决问题。

标签: regex regex-negation regex-group


【解决方案1】:

您可以在字符串split() 方法中使用正则表达式作为分隔符。它将返回分隔符之间的所有值。

let string = `12 Dec 2019
111111
13 Dec 2019
222222
14 Dec 2019
333333
15 Dec 2019
`;

let result = string.split(/\s*[0-9]{1,2}\s[A-Z]+\s[0-9]{4}\s/i);
console.log(result);

我将[A-z] 更改为[A-Z] 并添加i 修饰符以使其不区分大小写。在\s 周围也不需要[]

【讨论】:

  • [A-z]+ 很可能是错字,一定是[A-Za-z]+
猜你喜欢
  • 2016-01-16
  • 1970-01-01
  • 2011-10-06
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2016-05-05
相关资源
最近更新 更多