Javascript字符串变量不带引号?

Javascript字符串变量不带引号?,javascript,regex,variables,quickblox,Javascript,Regex,Variables,Quickblox,我正在使用QuickBlox JavaScript API。查看他们的代码,我发现这行代码: var URL_REGEXP = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!(

我正在使用QuickBlox JavaScript API。查看他们的代码,我发现这行代码:

var URL_REGEXP = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;
var-URL\u REGEXP=/\b((?:https?:\/\/\/)[a-z0-9.\-]+[。][a-z]{2,4}/)(?:[^\s()]+\([^\s()]+\([^\s())+([^\s()]+\)*)+(?:((^\s())++)+(^\s())++)(^\s())+)+(^\s())+)+(^-+)+)(^\s())+)(^-+)(^-+)(^-+)+)(^-+)(^-+)+)(^-+)(^-+)(^-+)+)(^-+)+)(^-+)(^-+)+)(^-+)+)(^-+)(^-+;
它似乎声明了一个字符串变量,该变量是正则表达式模式。然后,它继续使用该变量,因此:

return str.replace(URL_REGEXP, function(match) {
        url = (/^[a-z]+:/i).test(match) ? match : 'http://' + match;
        url_text = match;
        return '<a href="' + escapeHTML(url) + '" target="_blank">' + escapeHTML(url_text) + '</a>';
    });
返回str.replace(URL\u REGEXP,函数(匹配){
url=(/^[a-z]+:/i).测试(匹配)?匹配:'http://'+匹配;
url_text=匹配;
返回“”;
});
我想知道这怎么可能?第一行中声明的var应该是一个字符串,但它没有引号。这不是一个语法错误吗

我继续在我的浏览器上测试了这段代码,它成功了!这意味着我需要在这里学习…有人能解释一下这个变量是如何声明的吗

此外,我试图在我朋友的计算机上运行相同的代码,Chrome调试器在变量声明行上抛出语法错误(意外标记“/”).我使用的是Chrome版本36.0.1985.143 m,我的朋友也在使用同样的东西,但在我的电脑上,一切正常,在我的朋友电脑上,由于“语法错误”,代码在第一个变量声明时停止

有不同的设置吗

任何帮助都将不胜感激

更新

谢谢你的快速回答。我来自PHP背景,所以认为所有正则表达式都必须初始化为字符串:p

任何人都可以复制我在我朋友的计算机上遇到的语法错误(在禁用所有扩展后仍然会发生)。我也不能复制它,这正是让我感到沮丧的地方

更新2

我已经测试了我和我朋友的计算机,并查看了源代码。这似乎是由于一些编码问题(我不确定是什么原因)。正则表达式如下所示:

var URL_REGEXP = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?芦禄鈥溾€濃€樷€橾))/gi;
var-URL\u REGEXP=/\b((?:https?:\/\/\/)[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()]+\([^\s()]+\([^\s())+(\([^\s()]+\)*)+(?:\(^\s()]+++(^\s())+)+(^\s())+)+)+(^\s())+)++(^\s())+)(^-+)+)+)+(^-[^-+)+)(^-+)+)+)(^-[^-+)+)+)(^-[^-+)+)+)[^-[^-[^-[^-[^-]。,?芦禄鈥溾€濃€樷€橾))/胃肠道;
(代码末尾的字符似乎是一些随机的汉字)


如何更改编码以匹配他的浏览器/系统?(他在Windows 7简体中文系统上运行)。

它不是字符串变量。它是一个正则表达式

调用
var varname=/pattern/flags;

对调用
var varname=new RegExp(“模式”、“标志”);
有效

您可以在支持JavaScript控制台的任何浏览器中执行以下操作:

>>> var regex = /(?:[\w-]+\.)+[\w-]+/i
>>> regex.exec("google.com")
... ["google.com"]
>>> regex.exec("www.google.com")
... ["www.google.com"]
>>> regex.exec("ftp://ftp.google.com")
... ["ftp.google.com"]
>>> regex.exec("http://www.google.com")

任何人都可以复制我在我朋友的计算机上遇到的语法错误(在禁用所有扩展后仍然会发生)。我也不能复制它,这正是让我感到沮丧的地方

根据:


正则表达式文字出现在ECMAScript第一版中,在JavaScript 1.1中实现。请使用更新的浏览器。

不,这不应该是语法错误。在JavaScript中,
RegExp
对象不是字符串,它们是一类不同的对象。
/…/modifiers
RegExp
文字的语法


我无法解释你在你朋友的计算机上出现的语法错误,我觉得很好。我将它粘贴到Javascript控制台中,结果很好。

正则表达式不是字符串。我也无法重现语法错误。你在朋友的计算机上复制它时一定犯了错误。嗯……我已将它上载到Web服务器,是的可以通过您在浏览器中键入的url访问,因此文件应该完全相同,对吗?请尝试禁用其计算机上的所有Chrome扩展。所有浏览器都了解这一点,并且多年来一直存在。它是一个独特的数据类型还是一个类?@Rudie
typeof/*/
返回
“对象”
,所以它只是一个类,具有内置文字。“使用更新的浏览器。”您的浏览器需要多长时间?;)@我不知道。Chrome、Firefox、Internet Explorer、Opera和Safari应该都有支持。如果没有更多信息,如果浏览器非常非常过时的话,可能会有问题。我猜OP做了一些奇怪的事情。据我所知,所有JavaScript实现都支持这一点,甚至IE5及以下版本。