Ошибка недопустимого регулярного выражения

#javascript #regex #pattern-matching #lookbehind

#javascript #регулярное выражение #сопоставление с шаблоном #посмотрите назад

Вопрос:

Я пытаюсь получить категорию в этой строке « property_id=516amp;category=featured-properties «, поэтому результатом должно быть «featured-properties», и я придумал регулярное выражение и протестировал его на этом веб-сайте http://gskinner.com/RegExr /, и это сработало, как ожидалось, но когда я добавил регулярное выражение в свой код javascript, у меня возникла ошибка «Недопустимое регулярное выражение», кто-нибудь может сказать мне, что портит этот код?

Спасибо!

 var url = "property_id=516amp;category=featured-properties"
var urlRE = url.match('(?<=(category=))[a-z-] ');
alert(urlRE[0]);
  

Ответ №1:

Положительные поисковые системы (ваши ?<= ) не поддерживаются в средах JavaScript, которые не соответствуют стандарту ECMAScript 2018, что приводит к сбою вашего регулярного выражения.

Вы можете имитировать их множеством разных способов, но это может быть более простое регулярное выражение, которое выполнит работу за вас:

 var url = "property_id=516amp;category=featured-properties"
var urlRE = url.match(/category=([^amp;] )/);
// urlRE => ["category=featured-properties","featured-properties"]
// urlRE[1] => "featured-properties"
  

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

Ответ №2:

Синтаксис портит ваш код.

 var urlRE = url.match(/category=([a-z-] )/);
alert(urlRE[1]);
  

Комментарии:

1. чтобы пояснить это: используйте косые черты в качестве разделителя для регулярного выражения, а не кавычки.

2. Он по-прежнему выдает мне эту ошибку «Uncaught SyntaxError: Недопустимое регулярное выражение: / (? <=(категория=))[a-z-] /: Недопустимая группа»

3. Я обновил выражение для работы с javascript. были некоторые не поддерживаемые выражения.

4. Проблема не в косых чертах и кавычках: проблема в поиске.

Ответ №3:

Если вы хотите проанализировать параметры URL, вы можете использовать getParameterByName() функцию с этого сайта:

В любом случае, как уже упоминалось, регулярные выражения в JavaScript не являются простыми строками:

Ответ №4:

   var url = "property_id=516amp;category=featured-properties",

  urlRE = url.match(/(category=)([a-z-] )/i); //don't forget i if you want to match also uppercase letters in category "property_id=516amp;category=Featured-Properties"
  //urlRE = url.match(/(?<=(category=))[a-z-] /i); //this is a mess

  alert(urlRE[2]);