【发布时间】:2012-03-14 18:30:50
【问题描述】:
我有以下几点:
var1 = "www.asite.page.co.uk";
var2 = '.' + var1.match(/\w*\.\w*$/) [0];
我知道它正在尝试实现“.co.uk”,但我不知道 [0] 的作用。 是错误处理吗?
【问题讨论】:
标签: javascript regex match
我有以下几点:
var1 = "www.asite.page.co.uk";
var2 = '.' + var1.match(/\w*\.\w*$/) [0];
我知道它正在尝试实现“.co.uk”,但我不知道 [0] 的作用。 是错误处理吗?
【问题讨论】:
标签: javascript regex match
match 返回一个由 字符串 组成的 array。
没有全局标志,数组组成如下:
[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)
我建议看看:
【讨论】:
match 方法返回一个匹配数组,因此 [0] 获取该数组的第一个元素——即完全匹配。
有关更完整的说明,请参阅 match 或 Rob W's answer 的文档。
【讨论】:
请参阅 RobW 的答案以获得完整准确的参考。
match 方法返回一个数组。
match() 方法搜索正则表达式和字符串之间的匹配项,并返回匹配项。
此方法返回匹配数组,如果未找到匹配则返回 null。
[0] 用于仅返回第一个元素。
【讨论】:
var2 将是一个包含所有匹配项的数组
当您需要一个字符串时,使用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
【讨论】:
.+? 应该是 [\S\s]*?。当 TLD 不包含前缀 (*?) 或字符串包含换行符 ([\S\s]) 时,仍然应该存在匹配项。在这种情况下,这些情况可能不太可能发生,但通常,[\S\s] 应优先于 .(点与换行符不匹配)。