David Flanagan所著的JavaScript 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.]+来使用.+吗?

最佳答案

冒着被投票的风险,我要说的是David Flanagan的正则表达式中实际上有一个错字。正如@nnnnnn在他的评论中提到的那样,.点元字符包括\w,因此字符类[\w.]+(.)+没什么不同。还要注意,(\w)+不足以捕获URL的域,因为它包含句点,而\w不匹配。因此,我相信David打算使用以下正则表达式:

var url = /(\w+):\/\/(.+)\/(\S*)/;

10-05 20:50
查看更多