var name = unescape(decodeURIComponent(
unescape(unescape(unescape(url)))
.replace(/\s/g, '+')
.replace(/^.*\/|\?.*$|\#.*$|\&.*$/g,'') ||
url.replace(/.*\/\/|www./g,'')
.replace(/[^\w]+/g,'_')
.replace(/^_*|_*$/g,''))
).replace(/\+/g, ' ');
上面的代码是获取网页元素的名称,但是我不明白它是如何工作的,所以有人可以为我解释一下它的细节吗?
最佳答案
了解什么 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 中的 ||
运算符将返回左操作数,否则将返回右操作数的值。在本例中,作者似乎正在使用此运算符作为条件。他首先尝试对 url 进行三次解密,然后使用正则表达式删除部分字符串。如果这样做会产生空字符串,则 ||
运算符将返回正确运算符的值,然后(并且只有那时)直接跳转到正则表达式替换,而无需先取消编码。为什么?我不知道作者为什么要这样做,但这就是正在发生的事情。
还有一些其他细节发生,但这就是要点。基本上,如果您真的想知道发生了什么,您应该学习正则表达式。
关于javascript - 使用Javascript获取Web元素的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598875/