function htmlEncode(str) {
//var p = document.createElement('p');
//p.innerText = str;
//return p.innerHTML;
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
var mapper = function($0) {
return map[$0];
};
return str.replace(/[&<>"']/g, mapper);
}
上面代码中replace函数的第二个参数我看mdn上可以指定一个函数,其例子是
function replacer(match, p1, p2, p3, offset, string) {
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
这个例子我勉强可以看懂,可是最上面的代码map是一个对象,map[$0]这是啥意思呢,为啥参数是$0呢。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
所以你的问题其实是不理解property accessor
简单说,就是通过
item[属性名],可以访问到item变量的属性名的值str.replace(/[&<>"']/g, mapper)是指把匹配到的字符串替換成mapper回傳的值,其實相較官方例子,htmlEncode這個就比較簡單,先解釋下正則:/[&<>"']/g:匹配到&<>"'任何一個所以他會取代掉所有的上述特殊字元,而取代成什麼,就是從
map取得$0只是第一个参数的名字,你也可以管他叫a、b、c、_...而第一个参数的意义是匹配上正则表达式的字符串(
match)(chars which matched regex),正如mdn的例子,
replace方法替换字符串分两步:
1、首先根据第一个参数匹配要替换的字符,
2、找到要替换的字符之后,将之替换成第二个参数。
而这里第二个参数是一个函数,那么replace会将匹配到的字符作为参数传递给函数。