正则表达式前瞻

A Regex positive lookahead

我想用 RegExp 从另一个字符串中获取一个子字符串。

来源:\abc\$
模式:/\+(?=$)$/
预期结果:\\

所以我希望在字符串的末尾得到结果,但是正向先行并不像我想要的那样工作。没有 (?=) 部分它可以工作,但给了我 $ 符号 => \$ 但我不需要它。

这里有什么问题?
谢谢。

您需要将行的 $ 末尾放在先行中,因为先行不消耗字符。他们只是检查前一个标记是否跟在前瞻中的标记之后。

/\+(?=$$)/

DEMO

问题是前瞻是零宽度断言。表达式的 (?=$) 部分不是 'consume' 字符。因此,表达式会在您向前看后查找字符串的末尾,但会找到 $ 字符。

改用/\+(?=$$)/

您可能也打算使用捕获组;你确定第二个 $?

试试这个(如果字符串必须 $ 终止):

/(\+)(?=$$)/

或这个(如果 $ 可以出现在字符串中的任何位置):

/(\+)(?=$)/

您的正则表达式:

\+(?=$)$

执行以下操作:

  • 匹配反斜杠字符1次到无限次... \+
  • 正向预测匹配字符 $ ... (?=$)
  • 断言位置在行尾。 $

更正后的正则表达式为:

\+(?=$$)

这个正则表达式:

  • 匹配反斜杠字符1次到无限次... \+
  • 正向先行匹配字符 $ 并断言它在行尾... (?=$$)

主要问题是,正向前看不消耗一个字符。
它是一个零长度断言,就像行尾一样。
所以你必须在里面断言正向前看,即 $ 字符位于行尾。