var name = unescape(decodeURIComponent(
unescape(unescape(unescape(url)))
.replace(/\s/g, '+')
.replace(/^.*\/|\?.*$|\#.*$|\&.*$/g,'') ||
url.replace(/.*\/\/|www./g,'')
.replace(/[^\w]+/g,'_')
.replace(/^_*|_*$/g,''))
).replace(/\+/g, ' ');
上面的代码是获取网页元素的名称,但我不明白它是如何工作的,所以有人可以为我解释一下它的细节吗?
答案 0 :(得分:2)
了解Regular Expressions是什么。
如果您不知道Regular Expressions是什么,那么这是您需要学习的第一件事,因为基本上所有这些代码都在使用正则表达式。例如,代码.replace(/\s/g, '+')
将使用+
符号替换字符串中的所有空白字符。据推测,这是因为当您使用Google搜索时,Google会一直为您做到这一点。
.replace(/^.*\/|\?.*$|\#.*$|\&.*$/g,'')
将删除uri中第一个/
之前的所有内容,并且还会删除所有查询。例如,google.com/some/page.html?var=value
将变为some/page.html
decodeURIComponent
是一个javascript函数,它将使用Percent-Encoding编码的字符串并将其转换为普通字符串。
如果左操作数为true,则javascript中的||
运算符将返回左操作数,否则将返回右操作数的值。在这种情况下,看起来作者使用此运算符作为条件。他首先尝试取消编码网址三次,然后用正则表达式删除部分字符串。如果这样做会产生一个空字符串,那么||
运算符将返回右运算符的值,然后(然后才会)直接跳转到正则表达式替换而不首先取消编码。为什么?我不知道为什么作者会这样做,但这就是发生的事情。
还有其他一些细节,但这就是要点。基本上,如果你真的想知道发生了什么,你应该学习正则表达式。