小编Ann*_*na 的帖子

有人可以帮我理解正则表达式的exec方法吗?

我找到的exec方法最好的地方是Eloquent Javascript第9章:

"正则表达式也有一个exec(execute)方法,如果没有找到匹配则返回null,否则返回一个带有匹配信息的对象.从exec返回的对象有一个index属性告诉我们字符串中成功匹配的位置除此之外,该对象看起来像(实际上是)一个字符串数组,其第一个元素是匹配的字符串...."

到目前为止,这是有道理的,但后来有点令人困惑:

"当正则表达式包含用括号分组的子表达式时,匹配这些组的文本也将显示在数组中.整个匹配始终是第一个元素."

好的,但......

"下一个元素是与第一个组匹配的部分(其开头括号在表达式中首先出现的那个),然后是第二个组,依此类推."

var quotedText = /'([^']*)'/;
console.log(quotedText.exec("she said 'hello'"));
// ? ["'hello'", "hello"]
Run Code Online (Sandbox Code Playgroud)

我的困惑在于这个例子中的重复问候.我不明白为什么它会给我两个hellos回来?

然后该主题包含以下内容:

"当一个组最终没有匹配时(例如,后跟一个问号),它在输出数组中的位置将保持未定义.同样,当一个组多次匹配时,只有最后一个匹配结束在数组中."

console.log(/bad(ly)?/.exec("bad"));
// ? ["bad", undefined]
console.log(/(\d)+/.exec("123"));
// ? ["123", "3"]
Run Code Online (Sandbox Code Playgroud)

最后一句话和例子让我感到困惑....

在这上面的任何光线都将非常感激!

javascript regex

4
推荐指数
1
解决办法
128
查看次数

当数字长度大于21时,为什么我将5长度记录到控制台?

var metricUnits = function(num) {

console.log(num.toString().length);

};

// This works, gives me 21
metricUnits(900000000000000000000);

// But this fails, gives me 5
metricUnits(9000000000000000000000);
Run Code Online (Sandbox Code Playgroud)

当我调用此函数时,21将记录到控制台.但是,当我在输入参数的末尾添加一个或多个零时,将5打印到控制台?!为什么是这样?

javascript

3
推荐指数
1
解决办法
65
查看次数

标签 统计

javascript ×2

regex ×1