一个正则表达式的正向前瞻

时间:2015-01-04 12:47:03

标签: regex

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

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

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

这里的问题是什么?
感谢。

4 个答案:

答案 0 :(得分:3)

问题是向前看是零宽度断言。表达式的(?=\$)部分不会“消耗”一个字符。因此,表达式在您向前看后会查找字符串的结尾,但会找到$字符。

使用/\\+(?=\$$)/代替

答案 1 :(得分:2)

您需要将行的$末尾放在前瞻中,因为前瞻不会消耗字符。他们只是检查先前令牌后面是否有令牌。

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

DEMO

答案 2 :(得分:0)

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

尝试此操作(如果字符串必须$终止):

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

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

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

答案 3 :(得分:0)

你的正则表达式:

\\+(?=\$)$

执行以下操作:

  • 匹配1和无限时间之间的反斜杠字符... \\+
  • 匹配角色$ ... (?=\$)
  • 的正向前瞻
  • 断言位置位于该行的末尾。 $

更正的正则表达式是:

\\+(?=\$$)

这个正则表达式确实:

  • 匹配1和无限时间之间的反斜杠字符... \\+
  • 匹配字符$的正向前瞻,并在该行的末尾断言... (?=\$$)

主要的问题是,积极的前瞻不会消耗一个字符。
这是一个零长度的断言,就像行尾一样。
所以你必须在积极的前瞻中断言, $字符位于该行的末尾。