기본적으로 동영상 ID는 v=
앞에는을하고 중 하나 문자열의 끝, 또는 다음에 &
. 그래서 당신이 찾고있는 정규 표현식은 단순히 이것이다 :
당신은 (하지만 정말 필요하지 않은 것) 할 수
var expr = /(?:v=)([^&]+)/;
console.log('http://www.youtube.com/watch?v=9bZkp7q19f0&desc=gangnam'.match(expr)[1]);
//logs "9bZkp7q19f0"
console.log('http://www.youtube.com/watch?desc=gangnam&v=9bZkp7q19f0'.match(expr)[1]);
//logs "9bZkp7q19f0"
은 전체 문자열에 ?
다음에 URI (비트에 위의 패턴과 일치해야합니다 :
var expr = /\?.*(?:v=)([^&]+)/;
당신이 결함으로 가득 차있다 시도했습니다, 그리고 너무 많은 일이, 난 그냥 그것에 대해 잊지 것입니다 고정을 시작하기 위해 예를 들어 패턴 :.
/youtu.be/
일치 알 이탤릭체 youtu
다음에 의 임의의 문자 (줄 바꿈이 아님) (.
) 다음에 리터럴 be
이옵니다. 따라서 귀하의 의견에 대응 youtu2be
, youtu#be
, youtu.be
, 심지어 youtu be
일치 : 전부
expr = /(youtu\.be\/|[?&]v=)([^&]+)/;
console.log('http://www.youtu.be/9bZkp7q19f0'.match(expr)[2]);
//logs "9bZkp7q19f0"
console.log('http://www.youtube.com/watch?desc=gangnam&v=9bZkp7q19f0'.match(expr)[2]);
//logs "9bZkp7q19f0"
console.log('http://youtu.be/9bZkp7q19f0'.match(/(youtu\.be\/|v=)([^&]+)/)[2]);
//logs "9bZkp7q19f0"
console.log(' youtube.com/watch?argv=xyz&v=u8nQa1cJyX8'.match(/(youtu\.be\/|[?&]v=)([^&]+)/)[2]);
//logs "u8nQa1cJyX8"
합니다. 선행을 확인할 필요가 없습니까? 또는 & ...
작동합니까 방법 :
이
(youtu\.be\/|[?&]v=)
: 일치 중 문자 youtu.be/
또는 중 하나?v=
또는 &v=
([^&]+)
: &
을 제외하고, 이전의 일치를 다음과 일치 (및 그룹)의 모든
수단 그 youtu.be/<thiswillmatch>&<this will not match>
과 youtube.com/foo/bar/watch?some=params&v=<this will match>&<this won't>
. v=
비트가 ?
후 또는 앰퍼샌드 직후 인 경우,이 모든 정규식 v=
것을 발견, 다음과 첫 &
까지 다음 everythign 일치한다에 관심이 중요하지 않습니다. v=
을 찾을 수 없지만 youtu.be/
을 찾을 수없는 경우 정규식은 슬래시 (예 : vid ID) 뒤의 모든 것을 캡처합니다.
이렇게하면 http://youtu.be와 같은 URL에는 작동하지 않습니다./9bZkp7q19f0', 그냥'v'가 앰퍼샌드'&'가 앞에 붙는 경우를 설명하기 위해'? v ='의 기존 부분을 어떻게 바꾸는 지 제안 해 주시겠습니까? – user784637
정규 표현식의 부분을 변경하는 올바른 구문이 무엇인지에 대한 매우 구체적인 질문을했습니다. '? v ='는 앰퍼샌드를 설명합니다. 나는 그 변화를 만들기 위해 약 2 자 정도 더 있다고 확신한다. 올바른 구문이 무엇인지 아십니까? – user784637
@ user784637 : 예,하지만 저는 많은 일을하고 있다고 말하고 있습니다 ._ 같은 것을하는 대체 방식의 짧은 정규 표현식을 추가했습니다 ... 왜 사용하지 않습니까? 그러나 어쨌든,'watch \?'와 마찬가지로, 앞선 앰프와 물음표를 모두 다루는'watch \?. * (?: v =) ([^ &] +)'를 시도하십시오 –