匹配语句末尾的Javascript[0]

匹配语句末尾的Javascript[0],javascript,regex,match,Javascript,Regex,Match,我有以下资料: var1 = "www.asite.page.co.uk"; var2 = '.' + var1.match(/\w*\.\w*$/) [0]; 我知道它试图实现“.co.uk”,但我不知道[0]的功能。 是错误处理吗 参见RobW的答案,以获得完整准确的参考 该方法返回一个数组 match()方法搜索正则表达式和字符串之间的匹配,并返回匹配项。 此方法返回匹配数组,如果未找到匹配项,则返回null [0]仅用于返回第一个元素。match方法返回一个匹配数组,

我有以下资料:

    var1 = "www.asite.page.co.uk";
    var2 = '.' + var1.match(/\w*\.\w*$/) [0];
我知道它试图实现“.co.uk”,但我不知道[0]的功能。
是错误处理吗

参见RobW的答案,以获得完整准确的参考


该方法返回一个数组

match()方法搜索正则表达式和字符串之间的匹配,并返回匹配项。
此方法返回匹配数组,如果未找到匹配项,则返回null


[0]
仅用于返回第一个元素。

match方法返回一个匹配数组,因此[0]获取该数组的第一个元素,即完全匹配

有关更完整的说明,请参阅文档。

返回字符串的数组

如果没有全局标志,数组的组成如下所示:

  • 仅使用第一个匹配项
  • 第一个键
    [0]
    ,包含完整的第一个匹配项
  • 其他键包含第一个匹配中匹配的
例如:

var string = 'abc_123_abd_456';
var regexp = /_([0-9])/; // Matches an underscore, and groups a number
var match = string.match(regexp);
// match[0] = _1 (full match)
// match[1] = 1  (group)
指定全局标志时,数组由所有完全匹配组成:

var string = 'abc_123_abd_456';
var regexp = /_([0-9])/g; // Matches an underscore, and groups a number, GLOBAL
var match = string.match(regexp);
// match[0] = _1 (first full match)
// match[1] = _4 (second full match)
我建议您看看:

  • MDN:

当您需要一个字符串时,通常使用
替换
而不是
匹配

 var1 = "www.asite.page.co.uk";
 var2 = '.' + var1.replace(/.+?(\w*\.\w*)$/, '$1'); // .co.uk
顺便说一句,我觉得你的表情不对。更好的匹配TLD的方法是

(\.[a-z]+\.[a-z][a-z]|\.[a-z]{3,})$
它与“.co.uk”和“.com”都匹配。例如:

tld = "site.co.uk".replace(/.+?(\.[a-z]+\.[a-z][a-z]|\.[a-z]{3,})$/, '$1'); // .co.uk
tld = "yyy.com".replace(/.+?(\.[a-z]+\.[a-z][a-z]|\.[a-z]{3,})$/, '$1'); // .com

好的,谢谢你,这很有意义,如果你关闭它,它会显示数组中的每个元素吗?如果你关闭它,
var2
将是一个包含所有匹配项的数组yes@DidierGhys大错特错。如果不使用,则只显示一个匹配项,因为未指定全局标志。@RobW。事实上,我是从你的文档链接上读到的。我不是正则表达式专家,所以我想我在这里学到了一些东西。很抱歉,可能是错误的信息!从书签中删除w3schools,然后改用。使用mdn作为Google搜索的前缀,您将始终获得可靠的信息()。但请注意,如果匹配失败,则返回NULL,[0]将产生错误。我经常使用某种形式的东西(x.match(y)| |[“?”])[0],如果匹配失败,它将返回“?”。我不想太强调这一点;)请注意:
+?
应该是
[\S\S]*?
,以确保安全。当TLD不包含前缀(
*?
)或字符串包含换行符(
[\S\S]
)时,仍应存在匹配项。在这种情况下,这些情况可能不太可能发生,但一般来说,
[\S\S]
应该优先于
(点与换行符不匹配)。