克罗克福德的去实体化方法 - 《好部分》第41页
Crockford's deentityify method - p.41 of The Good Parts
为了自我完善,我正在阅读(并重读(Señor Crockford的TGP。然而,我无法理解他的去实体化方法的最中间部分。
...
return this.replace(...,
function (a, b) {
var r = ...
}
);
我想我明白:
- this.replace 传递了两个参数,正则表达式作为搜索值和函数生成替换值;
- B 用于访问实体对象中的属性;
- 返回
? r : a;
位确定是按原样返回文本,还是返回实体中相应属性的值。
我完全没有得到的是a和b是如何作为参数提供给function (a, b)
的。调用此函数的是什么?(我知道整个事情都是自我执行的,但这并没有真正为我澄清它。我想我在问这个函数是如何调用的?
如果有人有兴趣进行类似的逐一分析,我真的很感激,我怀疑其他人也可能。
为方便起见,以下是代码:
String.method('deentityify', function ( ) {
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function () {
return this.replace(
/&([^&;]+);/g,
function (a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}
);
};
}());
a
不是数字偏移量,而是匹配的子字符串。
b
(在这种情况下(是第一个分组,即比赛减去周围的&
和;
。
该方法检查以确保实体存在,并且它是一个字符串。如果是,那就是替换值,否则由原始值替换,减去&
和;
replace
函数可以将函数作为第二个参数。
然后为每个匹配项调用此函数,其签名取决于要搜索的正则表达式中的组数。如果正则表达式不包含任何捕获组,则a
将是匹配的子字符串,b
整个字符串中的数字偏移量。有关更多详细信息,请参阅 MDN 文档。
相关文章:
- 遗漏中间部分的单页点导航
- 将php页面的一个部分渲染为HTML和CSS后生成PDF,并考虑PDF分页符
- ng在一页中包含两次相同的部分页面
- HTML多页表单显示隐藏部分,保留表单数据
- 在部分视图内渲染的WebGrid将引发“;“jQuery未定义”,当尝试执行基于ajax的分页或过滤时
- 为什么这个 JS 会在 1 页上部分呈现的表单上触发,而不是在另一个页面上触发
- 有没有更好的方法来实现同样的结果?单页网站
- 解决内部分页符问题:避免
- 有没有更好的方法以一定的顺序执行一堆部分异步的jQuery函数
- 整页.js从一个部分跳到另一个部分时如何控制滚动速度
- 避免在打印后加载新页面,下一页应从上次打印页面的剩余部分打印 - 点阵打印机
- 变暗<部分>在单页网站上
- 在页面的 ajax 加载部分上初始化视频.js播放器
- JS初始化部分错误,整页.js
- 如何使用 HTTP 发布在 ASPX 页中提交部分或全部控件
- 整页更改特定部分的滚动速度
- 克罗克福德的去实体化方法 - 《好部分》第41页
- “赞”按钮和“赞”框不仅显示在我网站的某些页面上.其余部分工作正常
- 如何禁用整页的自动重新对齐行为.js当滚动在两个部分的中间之间结束时
- Knockout JS href attr 未绑定在 .NET MVC4 部分页面上