我有一个非常好的正则表达式函数,在这里调用:
<input onkeyup="vimeo();">
但问题是,当用户将链接粘贴到输入时,他会得到以下链接:
//player.imeo.com/video/VIDEOID
你知道吗?缺少&#34; v&#34;来自vimeo,我无法解决这个问题。
如果我删除&#34; /&#34; &#34; v&#34;之前的角色我得到重复的值,例如:
//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'));
});
};
如何修复缺失&#34; v&#34;没有重复任何价值?
更新
演示链接在这里:
答案 0 :(得分:2)
问题是你的替换字符串。您不需要转义任何字符。 replace方法的第二个参数采用字符串,而不是另一个正则表达式。
'\/\/player/\.\vimeo\.\com\/video/$1'
你可以这样做:
'//player.vimeo.com/video/$1'
然而,我不确定您为什么在输入和url元素上使用keyup事件。
我改变了你的功能,它对我有用。
修改强> 由于您只想使用一个字段,因此一旦用户完成编辑,您将需要使用onchange来格式化网址。我已经改变了功能以反映这种变化。请注意,您甚至不再需要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);">