Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python条件转换为JavaScript正则表达式_Javascript_Python_Regex_Translate - Fatal编程技术网

将Python条件转换为JavaScript正则表达式

将Python条件转换为JavaScript正则表达式,javascript,python,regex,translate,Javascript,Python,Regex,Translate,我正在尝试将这个python正则表达式转换为javascript正则表达式 我删除了开始和结束处的引号,添加了开始/^和结束分隔符/I,转义了前斜杠,删除了自由间距模式,最后得到了这个结果 var VALID_URL = /^((?:https?:\/\/|\/\/)?(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com\/|(?:www\.)?deturl\.com\/www\.youtube\.com\/|(?

我正在尝试将这个python正则表达式转换为javascript正则表达式

我删除了开始和结束处的引号,添加了开始
/^
和结束分隔符
/I
,转义了前斜杠,删除了自由间距模式,最后得到了这个结果

var VALID_URL = /^((?:https?:\/\/|\/\/)?(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com\/|(?:www\.)?deturl\.com\/www\.youtube\.com\/|(?:www\.)?pwnyoutube\.com\/|(?:www\.)?yourepeat\.com\/|tube\.majestyc\.net\/|youtube\.googleapis\.com\/)(?:.*?\#\/)?(?:(?:(?:v|embed|e)\/)|(?:(?:(?:watch|movie)(?:_popup)?(?:\.php)?\/?)?(?:\?|\#!?)(?:.*?&)?v=)))|youtu\.be\/|https?:\/\/(?:www\.)?cleanvideosearch\.com\/media\/action\/yt\/watch\?videoId=))?([0-9A-Za-z_-]{11})(?(1).+)?$/g;
但是,我正在使用的javascript正则表达式调试器在python正则表达式的这一部分的javascript转置中显示了
意外字符“(“?”

(?(1).+)?      # if we found the ID, everything can follow

知道如何解决此错误吗?

JavaScript不支持条件。

但regex的世界在没有条件的情况下已经存在了很长时间,而且有很多方法可以绕过它

想法

这个可怕的正则表达式的基本结构是:

(Capture A)? (Match B) ( If A was captured, (Match C)? )
您可以将IF转换为

(Capture A) (Match B) (Match C)? **OR** (Match B)
已转换正则表达式

试试这个:

^((?:https?://|//)?(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com/|(?:www\.)?deturl\.com/www\.youtube\.com/|(?:www\.)?pwnyoutube\.com/|(?:www\.)?yourepeat\.com/|tube\.majestyc\.net/|youtube\.googleapis\.com/)(?:[^\n]*?#/)?(?:(?:(?:v|embed|e)/)|(?:(?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?(?:\?|#!?)(?:[^\n]*?&)?v=)))|youtu\.be/|https?://(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=)([0-9A-Za-z_-]{11})(?:[^\n]+)?)|^([0-9A-Za-z_-]{11})
解释

如果设置了组1,
(?(1)[^\n]+)?
条件尝试可选地匹配
[^\n]+
。因为它发生在非可选的
([0-9A-Za-zā-]{11})之后,所以我将条件转换为可选的

  • 我对正则表达式的适用性没有任何判断……我重新安排了“语法”,但没有看“单词”。)
  • 要么我们匹配整个组1,现在我们直接将
    ([0-9A-Za-z_-]{11})和可选组件
  • 我们直接匹配
    ([0-9A-Za-z_-]{11})
  • 如果您有兴趣检索
    ([0-9A-Za-z_-]{11})
    ,这取决于替换的哪一侧与之匹配,它将位于不同的捕获组中。我让你数一数括号
  • 根据您的需要,可能有很多括号可以删除
参考


太棒了,很高兴它起作用了。仅供参考,我发布了一些关于条件句的参考资料。下次见!:)仅供参考,添加了有关翻译逻辑的解释。我会看看你的小提琴。。。但我对翻译感兴趣,而不是分析正则表达式。:)顺便问一下,你有没有在常见问题解答中看到这篇投票率很高的帖子?我正在看。还不确定发生了什么事。:)让我们。
^((?:https?://|//)?(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com/|(?:www\.)?deturl\.com/www\.youtube\.com/|(?:www\.)?pwnyoutube\.com/|(?:www\.)?yourepeat\.com/|tube\.majestyc\.net/|youtube\.googleapis\.com/)(?:[^\n]*?#/)?(?:(?:(?:v|embed|e)/)|(?:(?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?(?:\?|#!?)(?:[^\n]*?&)?v=)))|youtu\.be/|https?://(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=)([0-9A-Za-z_-]{11})(?:[^\n]+)?)|^([0-9A-Za-z_-]{11})