Javascript 存储在变量中的正则表达式在匹配时不起作用
我有一个散列的“允许链接”在我的rails后端上呈现,类似这样Javascript 存储在变量中的正则表达式在匹配时不起作用,javascript,jquery,ruby-on-rails,regex,ruby,Javascript,Jquery,Ruby On Rails,Regex,Ruby,我有一个散列的“允许链接”在我的rails后端上呈现,类似这样 ALLOWED_URLS = { "vimeo": { :regex => "/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/", }, "yo
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+)(?:$|/|?)/"
当我尝试测试它时,这个错误会显示出来
未捕获的语法错误:无效的正则表达式://https?:/(?:www.| player.)?vimeo.com/(?:channels/(?:w+/)?| groups/([^/]*)/视频/|相册/(d+)/视频/|视频/|)(d+)($:/|?)/:无需重复
在String.matc
我曾尝试将不带引号的正则表达式放在后端,但结果是一样的
我能做什么???这里有两个独立的问题:
\
作为转义字符# In your CoffeeScript...
str = '^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*'
re = new RegExp(str)
<script type="text/javascript">
let str = <%= ALLOWED_URLS[:youtube][:regex].to_json %>;
let re = new RegExp(str);
</script>
因此,现在您需要将此字符串输入到您的咖啡脚本中:
'^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*'
用Ruby构建字符串(使用单引号减少转义,不包括开头和结尾的斜杠):
然后您可以使用来_json
进入JavaScript:
# In your CoffeeScript...
str = '^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*'
re = new RegExp(str)
<script type="text/javascript">
let str = <%= ALLOWED_URLS[:youtube][:regex].to_json %>;
let re = new RegExp(str);
</script>
在JavaScript中。将其存储为字符串文字,并进行适当的反斜杠转义,然后在初始化正则表达式对象时使用正则表达式构造函数。@WiktorStribiżew我不知道如何做,请给我举个例子好吗?或者更好,将它们存储为正则表达式文字:
regex://^.*(youtu.be\/|v\/|u\/\w\/| embed\/|……///code>(即,删除环绕引号)。@muistooshort对我不起作用,如果我尝试在没有.to_json的情况下访问它,我会得到一个“missing/(unclosed regex)”错误,我想问题是我在使用。to_json,但我不知道抱歉,错过了CoffeeScript部分。为什么不先用CoffeeScript编写它们呢?Ruby和JavaScript正则表达式是不同的。天哪,谢谢!你是个天才!非常感谢!再次感谢你,我刚刚完成任务,你是我的英雄!