1

我刚刚发现这个与过滤哈希标签有关的代码片段,但我不明白它想做什么,我也不知道用谷歌搜索什么。

感谢您的提醒...

var index = 0;
var hash = window.location.hash; //store the entered hash value eg, #02

if (hash) {
    index = /\d+/.exec(hash)[0];
    index = (parseInt(index) || 1) - 1;
}
4

4 回答 4

2
  • if (hash) {: 如果hash不是垃圾值,如undefinednull空字符串。
  • index = /\d+/.exec(hash)[0]: 查找散列中的第一个数字,例如在里面#432将是432 (注意返回的值是一个字符串)
  • index = (parseInt(index) || 1) - 1:尝试转换index为一个数字,如果成功并且结果数字不是从返回的值中0减去1,否则返回1然后1从中减去,从而给我们0,这里的主要思想是似乎我们正在尝试获得一个数组的索引,因此索引不能小于0.
于 2013-11-06T16:01:14.330 回答
1

/\d+/表示一位或多位数字。

+指一个或多个前述元素。

执行

如果匹配成功,则 exec 方法返回一个数组并更新正则表达式对象的属性。返回的数组将匹配的文本作为第一项,然后是每个匹配的包含捕获的文本的捕获括号的一项。

如果匹配失败,则 exec 方法返回 null。

于 2013-11-06T15:59:37.137 回答
1

在正则表达式\d中将匹配单个数字。正+则表达式中的 将匹配它之前的表达式的重复。所以\d+将匹配一个完整的(所有重复的)数字。

所以

"55".match(/\d+/) //=>["55"]
"55".match(/\d/) //=>["5"]
"A string with 55".match(/\d+/) //=>["55"]
于 2013-11-06T16:01:19.447 回答
1
var hash = window.location.hash; //store the entered hash value eg, #02

只需获取 URL 的 # 部分

if (hash) {

检查哈希是否不为空

    index = /\d+/.exec(hash)[0];

尝试将哈希与数字序列匹配(这就是 \d+ 的意思)并将第一个这样的序列分配给索引

    index = (parseInt(index) || 1) - 1;

只需将索引转换为数字并将其减 1

如果哈希不包含数字,则此代码将引发异常,因此它不是很健壮

于 2013-11-06T16:02:47.013 回答