【发布时间】:2020-06-29 01:28:19
【问题描述】:
我有一个“允许的链接”散列在我的 Rails 后端渲染,像这样
ALLOWED_URLS = {
"vimeo": {
:regex => "/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/",
},
"youtube": {
:regex => "/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/",
}
在每个存储的值中,如果链接来自 youtube 或 Vimeo,我有一个正则表达式可以尝试,并且视频 id 我都尝试过它们,它们都可以正常工作。
但是当我将该变量传递给我的 CoffeeScript 并将其转换为 JSON 时,正则表达式不起作用,因为它带有引号,如下所示:
"/https?://(?:www.|player.)?vimeo.com/(?:channels/(?:w+/)?|groups/([^/]*)/videos/|album/(d+)/video/|video/|)(d+)(?:$|/|?)/"
当我尝试测试它时,会显示此错误...
Uncaught SyntaxError: Invalid regular expression: //https?://(?:www.|player.)?vimeo.com/(?:channels/(?:w+/)?|groups/([^/ ]*)/videos/|album/(d+)/video/|video/|)(d+)(?:$|/|?)//: 没什么可重复的 在 String.matc
我试过把不带引号的正则表达式放在后端,但结果是一样的
我能做什么??
【问题讨论】:
-
将其存储为字符串文字,并使用适当的反斜杠转义,然后在初始化正则表达式对象时使用正则表达式构造函数。
-
@WiktorStribiżew 我不知道该怎么做,你能给我举个例子吗?
-
或者更好的是,将它们存储为正则表达式文字:
regex: /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|.../(即删除环绕引号)。 -
@muistooshort 这对我不起作用,如果我尝试在没有 .to_json 的情况下访问它,我会收到“缺少/(未关闭的正则表达式)”错误,我认为问题在于我使用.to_json,但我不知道
-
抱歉,错过了 CoffeeScript 部分。为什么不一开始就用 CoffeeScript 编写它们呢?无论如何,Ruby 和 JavaScript 正则表达式是不同的。
标签: javascript jquery ruby-on-rails regex ruby