为什么我的正则表达式中缺少一个角色?

时间:2014-12-10 23:19:52

标签: javascript regex onkeyup

我有一个非常好的正则表达式函数,在这里调用:

<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;没有重复任何价值?

更新

演示链接在这里:

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

1 个答案:

答案 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);">