Javascript正则表达式相当于php失败

Opt*_*ime 0 javascript regex

猜猜这是一个非常简单的问题.我有一个正则表达式和PHP看起来像这样:

preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $v, $matches);
Run Code Online (Sandbox Code Playgroud)

(它从他们不同类型的网址中删除了youtube代码).我必须将此移植到javascript,我想使用相同的正则字符串.

我尝试过以下方法:

yturl.match(/#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be\/)[^&\n]+#/)
Run Code Online (Sandbox Code Playgroud)

但是这给了我Firebug中的这个错误: invalid quantifier

谁知道我做错了什么?

(我在Javascript中没有使用正则表达式的经验.所以请原谅我的愚蠢问题)

Tim*_*ker 5

几个问题:

  1. 您已将PHP分隔符(#)添加到JavaScript正则表达式中.
  2. JavaScript不支持lookbehind,因此您无法在JavaScript中使用PHP正则表达式
  3. 你的正则表达式是多余的.第三种选择匹配第一种匹配的所有内容.
  4. 正则表达式有一个错误:youtu.be应该是youtu\.be.

试试这个:

var myregexp = /\b(?:v\/|v=|youtu\.be\/)([^&\n]+)/;
var match = myregexp.exec(subject);
if (match != null) {
    result = match[1];
} else {
    result = "";
}
Run Code Online (Sandbox Code Playgroud)

这将产生与PHP正则表达式完全相同的结果,但它更容易阅读.它是否会返回正确的结果是另一个问题 - PHP正则表达式的质量使我怀疑它可能有更多的问题,而不仅仅是明显的问题.