定义分隔符

时间:2016-08-09 00:29:46

标签: javascript regex

我有一个文本,我想提取一些数据,但有一个问题:有非常相似的部分,这可能会导致正则表达式混淆。

示例:

header
text
data: 10
body

header
text
data: 10
body

我正在简化,因为我无权显示实际文本

我想在data之后提取数字,但我需要划定它位于标题和正文之间。为此,我正在使用正则表达式:

header[\s\S]*?data:\s(\d+)[\s\S]*?body

工作示例:https://regex101.com/r/tS9gU6/1

但是文本可能没有数据,所以它最终取下一个: https://regex101.com/r/hM7fV9/1

是否可以在不使用额外逻辑的情况下进行修复?我读了一些关于“展开循环”的内容

感谢。

2 个答案:

答案 0 :(得分:0)

我害怕误解你的问题。

但是,我想这个正则表达式可以正常工作。

#number {
  display: inline-block;
  width: 25px;
}

#header {
  display: inline-block;
}

.line {
  margin-left: 30px;
}

.spacer {
  padding-left: 15px;
}

我希望这篇文章可以帮到你。

答案 1 :(得分:0)

您需要的是tempered greedy token

header(?:(?!header)[\s\S])*data:\s(\d+)[\s\S]*?body

DEMO

非贪婪量词尽早停止匹配,但它们不会影响比赛何时开始。相反,您必须告诉它匹配除header之外的任何内容。