Javascript正则表达式在我的网站上没有得到验证,但它在验证器上有效

时间:2013-03-12 14:14:33

标签: javascript regex

我真的在墙上撞了我的脑袋。 我有这个正则表达式

(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)

摘录了YouTube视频的ID。我在这里试了一下

http://www.regular-expressions.info/javascriptexample.html

使用任何主题字符串,让我们说http://youtube.com/watch?v=21312321并且它有效。

但是在我的网站上,我有以下输入字段

<input type="text" name="status" id="status" placeholder="Post a youtube video link">

和以下jquery代码

$('#status').keyup(function(event){
    var value = $(this).val();
    var pattern = "(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)";
    var re = new RegExp(pattern);
      if (value.match(re)) {
        console.log("Successful match");
      } else {
        console.log("No match");
      }     
}); 

并使用与上述相同的视频,结果为&#34;不匹配&#34;。 怎么可能,请告诉我这里出了什么问题。

1 个答案:

答案 0 :(得分:2)

改为使用正则表达式文字:

var re = /(?:youtu\.be\/|youtube.com\/(?:watch\?.*\bv=|embed\/|v\/)|ytimg\.com\/vi\/)(.+?)(?:[^-a-zA-Z0-9]|$)/;

正在发生的事情是字符串已经“评估”转义,因此您的\.\b正在成为.和退格字符。 new RegExp在大多数情况下使用是错误的函数,并且只有在拥有动态正则表达式时才会非常有用(大多数情况下这也是错误的) - 正则表达式文字更有效,更易于阅读和因此不易出错。

(另外,youtube.com应该是youtube\.com。)