javascript - 为什么我不能将函数直接传递给 replace 方法?

标签 javascript regex str-replace

我根本无法理解为什么第二行和第三行的输出各不相同:

alphabet_ASCII = '';
for (i=65; i<=90; i++) {
  alphabet_ASCII += i;
}
alphabet_ASCII += '<br>';

document.body.innerHTML += alphabet_ASCII;



document.body.innerHTML += 
  alphabet_ASCII.replace(/\d{2}/g, x=>String.fromCharCode(x));

document.body.innerHTML += 
  alphabet_ASCII.replace(/\d{2}/g, String.fromCharCode);

x=>String.fromCharCode(x)String.fromCharCode 有什么区别?

最佳答案

因为 String.fromCharCode 接受多个参数,并且 replace 调用回调时使用的不仅仅是您期望的一个参数:它调用回调时使用:

  • 所有匹配的文本
  • 任何捕获组的内容(如果有)
  • 匹配发生的索引(偏移量)
  • 作用于整个字符串

More on MDN.

因此在您的第二个示例中,String.fromCharCode 获得的参数比您的第一个示例更多,并且会尽力而为。在第一次回调中,String.fromCharCode 获取 "65", 0, "6566676869707172737475767778798081828384858687888990" 并返回 "A\u0000\u0000" (因为第二个参数为 0 而第三个参数无效)。在第二遍中,它得到 "66", 2, "6566676869707172737475767778798081828384858687888990" 并返回 "B\u0002\u0000" 等。

关于javascript - 为什么我不能将函数直接传递给 replace 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340770/

相关文章:

javascript - 使用 JQuery 获取复选框选定状态

PHP/Regex 用正确的引号替换英寸字符

javascript - 替换javascript中的某些字符

python - 在 Python 中编写此正则表达式的更好方法

php - 正则表达式/DOM 解析用缩略图替换 YouTube iframe,同时保留字符串

php - 替换为空格 CKEditor

javascript - 我可以在表格中包含表格吗?我正在研究 AngularJS

javascript - Cloud Foundry 中的绑定(bind)服务不起作用

javascript - 模态内的拖放区

ios - 格式化货币 - Swift