2015-01-04 3 views
1

Я хочу получить подстроку из другой строки с помощью RegExp.Regex positive lookahead

Источник: \\abc\\\$
Узор: /\\+(?=\$)$/
Ожидаемый результат: \\\

Так что я жду, чтобы получить результат в конце строки, но положительный предпросмотр не работает, как я хотеть. Без части (? =) Это работает, но дает мне $ symbol =>\\\$, но мне это не нужно.

В чем проблема?
Спасибо.

ответ

2

Вам нужно поместить конец строки в lookahead в виде строк, которые не потребляют символы. Они просто проверяют, соответствует ли предыдущий токен токен в lookahead.

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

DEMO

3

Проблема заключается в том, что вид впереди нулевой ширины утверждение. Часть выражения (?=\$) не «потребляет» символ. Таким образом, выражение ищет конец строки после вашего взгляда вперед, но находит символ $.

использование /\\+(?=\$$)/ вместо

0

Вы, вероятно, имел в виду использовать группу захвата, тоже; и уверены ли вы во втором $?

Попробуйте (если строка должна быть $ прекращена):

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

или это (если $ может произойти в любом месте строки):

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

Ваше регулярное выражение:

\\+(?=\$)$

делает следующее:

  • Матча обратная косая черта между 1 и unlimmited раза ... \\+
  • Положительного опережение матча персонажем $ ... (?=\$)
  • Утверждает положение в конце строки. $

Скорректированный регулярное выражение:

\\+(?=\$$)

Это регулярное выражение делает:

  • Матч обратной косой черты между 1 и unlimmited раз ...\\+
  • Положительное опережение в соответствии с символом $ и утверждают, что это на конце линии ... (?=\$$)

Основная проблема в том, что положительный предпросмотр не потребляет символ.
Это утверждение с нулевой длиной, как конец строки.
Итак, вы должны утверждать внутри положительного взгляда, что символ $ находится в конце строки.