在David Flanagan撰写的JavaScript the Definite Guide 6th edition中,有一个使用正则表达式的例子:
例如,考虑使用以下代码解析URL:
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/~david";
var result = text.match(url);
if (result != null)
{
var fullurl = result[0]; // Contains "http://www.example.com/~david"
var protocol = result[1]; // Contains "http"
var host = result[2]; // Contains "www.example.com"
var path = result[3]; // Contains "~david"
}
我想知道为什么在第二个带括号的表达式中他使用[\w.]+
而不只是.+
?
答案 0 :(得分:3)
冒着被投票的风险,我会说David Flanagan在他的正则表达中实际上有一个拼写错误。正如@nnnnnn在评论中提到的,.
点元字符包含 \w
,因此字符类[\w.]+
与(.)+
没有区别。另请注意,(\w)+
不足以捕获网址域,因为它包含\w
不匹配的句点。所以,我相信大卫打算使用以下正则表达式:
var url = /(\w+):\/\/(.+)\/(\S*)/;