1.任务及要求
Convert HTML Entities
将字符串中的字符
&
、<
、>
、"
(双引号), 以及'
(单引号)转换为它们对应的 HTML 实体。如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
测试数据:
convert("Dolce & Gabbana")
应该返回Dolce & Gabbana
。convert("Hamburgers < Pizza < Tacos")
应该返回Hamburgers < Pizza < Tacos
。convert("Sixty > twelve")
应该返回Sixty > twelve
。convert('Stuff in "quotation marks"')
应该返回Stuff in "quotation marks"
。convert("Shindler's List")
应该返回Shindler's List
。convert("<>")
应该返回<>
。convert("abc")
应该返回abc
。
2.我的解法
// 思路梳理:
// 1,将字符串分割存储为数组
// 2,将目标字符替换为HTML实体
// 3,组合字符串并输出
// 但是,任务给提供了RegExp,是想让用正则表达式实现?
// 正则表达式30分钟入门教程:https://deerchao.cn/tutorials/regex/regex.htm (当然30分钟是入不了门的)
// 在线正则表达式测试:https://deerchao.cn/tools/wegester/
// 尝试使用正则匹配并替换;
1 function convert(str) { 2 // :) 3 4 var strArr = str.split(""); 5 6 for(var i = 0; i < strArr.length; i ++) { 7 switch(strArr[i]) { 8 case "&": 9 strArr[i] = "&"; 10 break; 11 case "<": 12 strArr[i] = "<"; 13 break; 14 case ">": 15 strArr[i] = ">"; 16 break; 17 case '"': 18 strArr[i] = """; 19 break; 20 case "'": 21 strArr[i] = "'"; 22 break; 23 } 24 } 25 str = strArr.join(""); 26 // 利用正则表达式匹配并替换 27 // str = str.replace(/[&]/g,"&").replace(/[<]/g,"<").replace(/[>]/g,">").replace(/["]/g,""").replace(/[']/g,"'"); 28 return str; 29 } 30 31 convert("Dolce & Gabbana");
3.发现的其他解法
// 更好的方法:
// CSDN:https://blog.csdn.net/qq_32623363/article/details/76982829
1 function convert(str) { 2 var regObj = { 3 "&":"&", 4 "<":"<", 5 ">":">", 6 '"':""", 7 "'":"'" 8 }; 9 var reg = /[&<>"']/g; 10 11 var arr = str.match(reg); 12 if(arr){ 13 for(var i in arr){ 14 str = str.replace(arr[i],regObj[arr[i]]); 15 } 16 } 17 return str; 18 }
// 另外一种:
// CSDN:https://blog.csdn.net/funkstill/article/details/89004935
1 function convert(str) { 2 // :) 3 var r='',htmlObj = {'&':'&','>':'>','<':'<','"':'"','\'':'''}; 4 str.split('').map(function(s){ 5 if(/^[>"<'&]/.test(s)){ 6 r+=htmlObj[s]; 7 }else{ 8 r+=s; 9 } 10 }); 11 return r; 12 } 13 14 convert("Dolce & Gabbana");