2015-01-04 83 views
1

我想从另一个字符串与RegExp获取子字符串。正则表达式积极lookahead

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

所以我期望得到的结果字符串的结束,但是正预测先行不为我工作想。没有(?=)部分它的工作,但给了我$符号=>\\\$,但我不需要它。

这里有什么问题?
谢谢。

回答

2

您需要将$行的末尾放在预见范围内,因为预览不会消耗字符。他们只是检查前一个令牌是否跟随在前瞻中的令牌。

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

DEMO

3

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

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

0

你可能意味着使用捕获组,太多;你确定第二个$?

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

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

或本(如果$可以在字符串中的任何地方发生):

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

你的正则表达式:

\\+(?=\$)$

执行以下操作:

  • 第1场和unlimmited时间之间的反斜杠字符...匹配的字符$的\\+
  • 正向前查找... (?=\$)
  • 断言的位置是在该行的末尾。 $

修正的正则表达式是:

\\+(?=\$$)

此正则表达式的作用:

  • 第1场和unlimmited时间之间的反斜杠字符...\\+
  • 匹配字符$,并断言这是在该行的结束正向前查找... (?=\$$)

的主要问题是,在正向前查找不消耗字符。
这是一个像行尾一样的零长度断言。
所以你必须在积极的向前看,$字符是在行的末尾。

相关问题