需要帮助解释javascript正则表达式

时间:2013-11-06 15:54:48

标签: javascript hash

我刚刚发现这个代码片段与过滤哈希标签有关,但我不明白它想要做什么,而且我也不确定谷歌是什么。

感谢您的提醒...

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 个答案:

答案 0 :(得分:2)

  • if (hash) {:如果hash ,则为undefinednull或空字符串等垃圾值。
  • index = /\d+/.exec(hash)[0]:查找哈希中的第一个数字,例如#432内的432 (注意返回的值是字符串)
  • index = (parseInt(index) || 1) - 1:尝试将index转换为数字,如果结果为数字且结果数字不是0,则从返回的值中减去1,否则返回1然后从中减去1,从而给我们0,这里的主要想法是,似乎我们正在尝试获取数组的索引,因此索引不能少于比0

答案 1 :(得分:1)

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

  

+表示前面一个或多个元素。

另外exec

  

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

     

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

答案 2 :(得分:1)

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

所以

"55".match(/\d+/) //=>["55"]
"55".match(/\d/) //=>["5"]
"A string with 55".match(/\d+/) //=>["55"]

答案 3 :(得分:1)

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

只需获取网址的#部分

if (hash) {

检查散列是否为空

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

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

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

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

如果哈希不包含数字,则此代码会抛出异常,因此它不是很健壮