将Python条件转换为JavaScript正则表达式
我正在尝试将这个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\/|(?
/^
和结束分隔符/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})