#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]);