2015-01-04 97 views
1

我想從另一個字符串與RegExp獲取子字符串。正則表達式積極lookahead

來源:\\abc\\\$
模式:/\\+(?=\$)$/
預期結果:\\\

所以我期望得到的結果字符串的結束,但是正預測先行不爲我工作想。沒有(?=)部分它的工作,但給了我$符號=>\\\$,但我不需要它。

這裏有什麼問題?
謝謝。

回答

2

您需要將$行的末尾放在預見範圍內,因爲預覽不會消耗字符。他們只是檢查前一個令牌是否跟隨在前瞻中的令牌。

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

DEMO

3

的問題是,未來一看是一個零寬度斷言。表達式的(?=\$)部分不會「消耗」一個字符。因此,表達式在查找前查找字符串的結尾,但找到$字符。

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

0

你可能意味着使用捕獲組,太多;你確定第二個$?

試試這個(如果字符串必須$終止):

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

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

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

你的正則表達式:

\\+(?=\$)$

執行以下操作:

  • 第1場和unlimmited時間之間的反斜槓字符...匹配的字符$的\\+
  • 正向前查找... (?=\$)
  • 斷言的位置是在該行的末尾。 $

修正的正則表達式是:

\\+(?=\$$)

此正則表達式的作用:

  • 第1場和unlimmited時間之間的反斜槓字符...\\+
  • 匹配字符$,並斷言這是在該行的結束正向前查找... (?=\$$)

的主要問題是,在正向前查找不消耗字符。
這是一個像行尾一樣的零長度斷言。
所以你必須在積極的向前看,$字符是在行的末尾。