Javascript / RegExp: Lookbehind Утверждение вызывает ошибку «Недопустимая группа»

6

Я делаю простое утверждение Lookbehind, чтобы получить сегмент URL (пример ниже), но вместо получения совпадения я получаю следующую ошибку:

Uncaught SyntaxError: Invalid regular expression: /(?<=\#\!\/)([^\/]+)/: Invalid group

Вот script Я запускаю:

var url = window.location.toString();

url == http://my.domain.com/index.php/#!/write-stuff/something-else

// lookbehind to only match the segment after the hash-bang.

var regex = /(?<=\#\!\/)([^\/]+)/i; 
console.log('test this url: ', url, 'we found this match: ', url.match( regex ) );

результат должен быть write-stuff.

Может кто-нибудь пролить свет на то, почему эта группа регулярных выражений вызывает эту ошибку? Похож на действительный RegEx для меня.

Я знаю альтернативы о том, как получить сегмент, в котором я нуждаюсь, поэтому это действительно помогает мне понять, что происходит здесь, а не получать альтернативное решение.

Спасибо за чтение.

J.

  • 0
    Можете ли вы привести пример входной строки, и какая ее часть должна соответствовать регулярному выражению?
  • 0
    Я переместил его из блока кода в основной пример. Обновлено выше. Пожалуйста, дайте мне знать, если вы хотите получить более подробную информацию, и я с удовольствием опубликую ее.
Теги:
match
lookbehind

2 ответа

9
Лучший ответ

Я считаю, что JavaScript не поддерживает позитивный lookbehind. Вам нужно будет сделать что-то более похожее:

<script>
var regex = /\#\!\/([^\/]+)/;
var url = "http://my.domain.com/index.php/#!/write-stuff/something-else";
var match = regex.exec(url);
alert(match[1]);
</script>
7

Javascript не поддерживает синтаксис look-behind, поэтому (?<=) вызывает ошибку недействительности. Однако вы можете имитировать его различными способами: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

Ещё вопросы

Сообщество Overcoder
Наверх
Меню