ex17-16-5
ソース
function sanitizeATag(aTag) { /* タグの属性の整理(不要な属性の削除) */
const parts = aTag.match(/<a\s+(.*?)>(.*?)<\/a>/i); /* <a...>...</a>の抜き出し */
// console.log(`parts[1]=${parts[1]}`); /* 属性部分 */
// console.log(`parts[2]=${parts[2]}`); /* <a...>と</a>の間にある文字列 */
const attributes = parts[1].split(/\s+/); /* 属性を分割 */
return '<a ' + /* <a>タグの始まり */
attributes /* 属性に対して */
.filter(attr => /^(?:class|id|href)[\s=]/i.test(attr))
/* class、id、hrefの属性のみを選ぶ */
.join(' ') /* スペースを間に挟みながら合体 */
+ '>' /* <a>タグを閉じる */
+ parts[2] /* <a>と</a>の間の文字列(リンク先のテキスト)を加える */
+ '</a>'; /* 閉じタグ */
}
// #@@range_begin(list1)
const html =
`○○<a onclick="alert('!!')" class="cl1" href="/foo" id="id1">XXX</a>△△`;
const r = html.replace(/<a .*?<\/a>/ig, sanitizeATag);
console.log(r); // ○○<a class="cl1" href="/foo" id="id1">XXX</a>△△
// #@@range_end(list1)