我找到的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)
最后一句话和例子让我感到困惑....
在这上面的任何光线都将非常感激!
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打印到控制台?!为什么是这样?