这个RegExp有什么问题? (前面的标记不可量化)

时间:2017-05-15 12:42:31

标签: regex

我试图编写一个正则表达式:

1)抓住一个紧接在' Seite'之后的小组。后跟一个或多个空格(但没有空格以外的文字),将被引用为\ 1

2)紧接着这个小组(即\ 1)但不再包括

一个有效的例子是:

输入:Seite120 kljwqenflkjqwef 120
输出:120 kljwqenflkjqwef

我不确定如何使这项工作。我最好的尝试是:

((?<=Seite)(?=\s)).*(?=\1)

RegExp的任何人都可以比我更好吗?

2 个答案:

答案 0 :(得分:1)

捕获零宽度断言只会导致组缓冲区内出现空字符串。

您可以使用

Seite\K(\S+)\s+\S.*?(?=\s*\1)

请参阅regex demo

<强>详情:

  • Seite - 子字符串Seite
  • \K - 匹配重置运算符,丢弃目前为止匹配的文本
  • (\S+) - 第1组捕获1个非空白符号
  • \s+ - 1+空格
  • \S - 非空白
  • .*? - 任意0个字符,尽可能少,直至第一个
  • (?=\s*\1) - 0+空格后跟第1组的内容(因为此模式是前瞻的一部分,与此构造匹配的文本不会添加到匹配值中)。

答案 1 :(得分:0)

在评论中,您表明您正在为JavaScript编写正则表达式。因此,回答您最初的问题,即您收到错误的原因&#34;前面的令牌无法量化&#34;这是因为你正在使用断言(?<=Seite)后面的内容,并且在JavaScript中不支持断言。正则表达式的?<=部分无法由JavaScript正则表达式引擎解释。