我正在使用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中文简化系统)。
答案 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
对象不是字符串,它们是不同的对象类。 /.../modifiers
是RegExp
文字的语法。
我无法解释您在朋友的计算机上遇到的语法错误,对我来说这很好。我将它粘贴到Javascript控制台中,它很好。