Javascript字符串变量不加引号

Javascript string variable unquoted?

本文关键字:加引号 变量 字符串 Javascript      更新时间:2023-09-26

我正在使用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;

似乎声明了一个正则表达式模式的字符串变量。然后它继续使用这个变量,这样:

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>';
    });

我想知道这怎么可能?在第一行声明的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;

(代码末尾的字符似乎是一些随机的中文字符)。

如何更改编码以匹配他的浏览器/系统?(他使用的是Windows 7简体系统)

不是String变量。正则表达式

呼叫var varname = /pattern/flags;
有效调用var varname = new RegExp("pattern", "flags");

您可以在任何支持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")

谁能重现我在我朋友的电脑上得到的语法错误?(禁用所有扩展后仍然会发生)。我也不能复制它,这就是让我沮丧的地方。

根据RegExp - JavaScript文档:

Regex字面值在ECMAScript第1版中出现,在JavaScript 1.1中实现。使用更新后的浏览器

不,它不应该是语法错误。在Javascript中,RegExp对象不是字符串,它们是一个不同的对象类。/.../modifiersRegExp文字的语法。

我无法解释你在你朋友的电脑上出现的语法错误,在我看来它很好。我把它粘贴到Javascript控制台,它是好的。