2014-12-10 5 views
0

내가 여기에 전화 아주 좋은 정규식 기능이 있습니다왜 내 정규식에서 한 문자가 누락 되었습니까?

<input onkeyup="vimeo();"> 

을하지만 사용자가 입력에의 링크를 붙여 넣을 때 문제가있다, 그는이 링크를 얻을 :

//player.imeo.com/video/VIDEOID 

당신 만나다? vimeo에서 "v"가 누락되어서이 문제를 전달할 수 없습니다. 는 내가 전에 "V"의 "/"문자를 삭제하면 내가 예를 들어, 값을 반복 얻을 :

//player.player.player.player.player.player.player.player.vimeo.com/video/VIDEOID 

스크립트 대체 내는 다음과 같습니다

var vimeo = function(){ 
    var str2; 
    $('#url').keyup(function(){ 
    str2 = $(this).val(); 
    $(this).val(str2.replace(/(?:http:\/\/)?(?:www\.)?(?:vimeo\.com)\/(.+)/g, '\/\/player/\.\vimeo\.\com\/video/$1')); 
    }); 
}; 

나는 "V 누락 고칠 수있는 방법 "어떤 가치도 반복하지 않고?

업데이트 :

데모 링크는 여기에 있습니다 :

http://neocsatblog.mblx.hu/addvideos/

+1

당신은 최종 값으로 무엇을 원하는가? – Robbert

+0

나는 더 이상한 결과를 얻는다. 당신의 의견은 무엇입니까? – putvande

+4

'\ v' =>'v' 왜 당신은 그것을 벗어날 수 있습니까? '\ v'는 수직 탭입니다. – Wrikken

답변

2

문제는 교체 문자열입니다. 문자를 이스케이프 할 필요가 없습니다. replace 메소드의 두 번째 인수는 다른 정규 표현식이 아닌 문자열을 사용합니다.

'\/\/player/\.\vimeo\.\com\/video/$1' 

당신은이 작업을 수행 할 수 있습니다

'//player.vimeo.com/video/$1' 

나는 확실하지 않다 당신이 당신의 URL 요소뿐만 아니라 귀하의 의견에의 keyup 이벤트를 사용하는 이유, 그러나.

나는 당신의 기능을 조금 바꿨다. 그것은 나를 위해 일한다.

수정 하나의 필드 만 사용하려는 경우 사용자가 편집을 완료하면 onchange를 사용하여 URL을 포맷해야합니다. 이 변경 사항을 반영하기 위해 함수를 변경했습니다. jQuery가 더 이상 필요 없다는 것을 주목하십시오.

var vimeo = function(elem) { 
 
    var str2 = elem.value; 
 
    elem.value = str2.replace(/(?:http:\/\/)?(?:www\.)?(?:vimeo\.com)\/(.+)/g, '//player.vimeo.com/video/$1'); 
 

 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<input onchange="vimeo(this);">

+0

네, 작동합니다. 그러나 나는 진짜 라이브 이벤트를 프로듀싱 할 수 없다는 점에 대해 정말 유감스럽게 생각합니다. 최종 마무리 : 이 페이지는 실시간으로 모든 것이되어야합니다. (입력시 데이터베이스에 실시간 저장, 입력시 링크 반복 등). – Neo

+0

어쨌든 당신이 onchange에 대한 대답을 편집한다면 나는 그것을 받아 들여 당신에게 improvents를 주셔서 감사합니다. – Neo

+0

solutiion 및 귀하의 편집 해 주셔서 감사합니다! – Neo