У меня есть регулярное выражение PHP, которое я использую, чтобы получить видеокодек YouTube из URL-адреса.
Я хотел бы сопоставить это с регулярным выражением на клиентской стороне в JavaScript. Может ли кто-нибудь сказать мне, как преобразовать следующее PHP-выражение в JavaScript?
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $url, $matches);
Большое спасибо, спасибо!
Я думаю, единственная проблема – избавиться от утверждений lookbehind (?<=...)
, они не поддерживаются в Javascript.
Их преимущество заключается в том, что вы можете использовать их, чтобы убедиться, что шаблон перед чем-то, но они НЕ включены в совпадение.
Таким образом, вам нужно удалить их, означает изменение (?<=v=)[a-zA-Z0-9-]+(?=&)
v=[a-zA-Z0-9-]+(?=&)
, но теперь ваш матч начинается с «v =».
Если вам просто нужно проверить и не нуждаться в согласованной части, тогда все будет хорошо.
Но если вам нужна часть после v=
тогда вместо этого нужно добавить шаблон в группу захвата и продолжить работу с этими захваченными значениями.
v=([a-zA-Z0-9-]+)(?=&)
Затем вы найдете совпадающую подстроку в $ 1 для первой группы, $ 2 для второй, $ 3 …
вы можете заменить свой взгляд на утверждение, используя этот пост
Javascript: отрицательный эквивалент lookbehind?