1

我真的把头撞在墙上了。我有这个正则表达式模式

(?: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");
      }     
}); 

通过使用与上面相同的视频,结果是“不匹配”。这怎么可能,请告诉我这里出了什么问题。

4

1 回答 1

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。)

于 2013-03-12T14:15:52.627 回答