我真的在墙上撞了我的脑袋。 我有这个正则表达式
(?: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;。 怎么可能,请告诉我这里出了什么问题。
答案 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
。)