Javascript字符串变量没有引用?

时间:2014-08-16 13:04:09

标签: 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`!()\[\]{};:'".,<>?«»“”‘’]))/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调试器会在变量声明行上抛出语法错误(意外令牌&#39; /&#39;)。我使用的是Chrome版本36.0.1985.143 m,我的朋友正在使用同样的东西,但在我的电脑上,一切正常,在我的朋友计算机上,代码在第一个变量声明处停止,因为&#34;语法错误&# 34。

是否有一些不同的设置?

任何帮助都将不胜感激。

更新

感谢您的快速解答。我来自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中文简化系统)。

2 个答案:

答案 0 :(得分:2)

它不是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 documentation

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

答案 1 :(得分:1)

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

我无法解释您在朋友的计算机上遇到的语法错误,对我来说这很好。我将它粘贴到Javascript控制台中,它很好。