我有以下内容:
var1 = "www.asite.page.co.uk";
var2 = '.' + var1.match(/\w*\.\w*$/) [0];
我知道它正试图实现“.co.uk”,但我不知道[0]的作用。 是错误处理吗?
答案 0 :(得分:4)
match方法返回一个匹配数组,因此[0]获取该数组的第一个元素 - 即只是完全匹配。
有关更完整的说明,请参阅match或Rob W's answer的文档。
答案 1 :(得分:4)
match
会返回字符串的数组。
没有全局标志,数组的组成如下:
[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)
我建议看看:
答案 2 :(得分:3)
请参阅RobW的答案,以获得完整和准确的参考。
match方法返回一个数组。
match()方法搜索正则表达式和字符串之间的匹配,并返回匹配项 此方法返回匹配数组,如果未找到匹配项,则返回null。
[0]
仅用于返回第一个元素。
答案 3 :(得分:1)
当您需要一个字符串时,使用replace
而不是match
通常很实用:
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