当前位置: 首页 > article >正文

递归手撕,JSON 字符串化和解析,加权树结构的字符串解析对象,解析并返回DOM 树结构(DOMParser),解析带有层级的文本

目录

1 JSON 字符串化和解析

2 加权树结构的字符串解析对象

3. 解析并返回DOM 树结构

4. 解析带有层级的文本


1 JSON 字符串化和解析

//  <!-- 实现一个函数,能够将自定义格式的字符串转换为 JSON 对象。
//      例如,给定字符串 'name: "Alice", age: 30',输出 { name: "Alice", age: 30 }。 -->
function digui(str){
 //首先 截取,的前后 然后截取:的前后
 let obj={}
 //str1='' x.slice()
 let arr=str.split(',')
 //['name:'alice],['age':'30']

 //考虑到alice外的引号和:后的空白没
 arr.map((item,index)=>{
  let [apple,pine]=item.split(': ').map((i)=>i.trim())
  pine=JSON.parse(pine)
  obj[apple]=pine

 })
 return obj

}
let str='name: "Alice", age: 30'
console.log(digui(str))

2 加权树结构的字符串解析对象

给定一个加权树结构的字符串,例如 '(A:3,(B:2,C:1))',解析为一个对象 { A: 3, B: 2, C: 1 }。

//遇到左括号 递归 处理去掉逗号后 去掉冒号 第
  function digui(str){
//干脆去除所有括号 
let str2=''
for(let i=0;i<str.length;i++){
 
  if(str[i]!='(' && str[i]!=')')
  str2+=str[i]

}
let obj={}
let lines=str2.split(',').map(item => item.trim())
//[a:3],[b,3]
lines.forEach((item)=>{
  let [apple,pine]=item.split(':').map(item => item.trim())
  obj[apple]=pine

})
return obj


  }
  let str='(A:3,(B:2,C:1))'
  console.log(digui(str))

3. 解析并返回DOM 树结构

实现一个函数,能够解析简单的 HTML 字符串并返回 DOM 树结构。

// 例如,给定字符串 "<div><span>Hello</span><p>World</p></div>"

function apple(str){
let parser = new DOMParser()
let tryparser = parser.parseFromString(str,'text/html').body.firstChild
return tryparser
  }

  let str= "<div><span>Hello</span><p>World</p></div>";
  console.log(apple(str)); 

解析后返回的文档中包含一个完整的 HTML 文档结构(包含 <html><head> 和 <body> 标签),.body 选择其中的 <body> 元素。firstChild 选择 <body> 中的第一个子节点div。

text/html' 告诉浏览器和 JavaScript 解释器要将字符串按照 HTML 格式解析。

4. 解析带有层级的文本

编写一个函数将其解析为树形结构。

function treee(str){
    let root={value:'root',children:[]}
  let st=[root]
  let lines=str.split('\n')
  lines.forEach(line=>{
let level=line.search(/\S/)
let node={value:line.trim(),children:[]}
while(st.length>level+1){
  st.pop()
}
st[st.length-1].children.push(node)
st.push(node)
  })
   return root 
  
  }
  const text = 'A\n  B\n    C\n  D';
    console.log(JSON.stringify(treee(text), null, 2));
  


http://www.kler.cn/news/315302.html

相关文章:

  • 51单片机-LCD1602(液晶显示屏)- 写驱动
  • 数据结构-树(基础,分类,遍历)
  • JAVA基础:System类,Runtime类,Arrays类的常用方法,二分查找算法
  • C++竞赛初阶L1-16-第七单元-字符串(36~37课)559: T456513 统计数字字符个数
  • 基于Redis实现幂等判断
  • 异步请求的方法以及原理
  • MyBatis动态SQL中的`if`标签使用【后端 19】
  • C++ 条件变量:wait、wait_for、wait_until
  • 【开源大模型生态9】百度的文心大模型
  • 主播和礼品检测系统源码分享
  • 高速下载大模型文件
  • 【读点论文】Text Recognition in the Wild: A Survey 非常纯粹的OCR研究,专业细致,脉络清晰
  • Datawhale X 南瓜书 task01学习笔记
  • Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
  • c语言练习题1(数组和循环)
  • python发送邮件 - email smtplib
  • vue2项目实现国际化(若依框架示例)
  • c语言习题
  • JS领域的AI工程利器分享
  • Spring Cloud Gateway组件
  • 如何在 Spring Boot中更改默认端口
  • sql语法学习
  • 【HTTPS】对称加密和非对称加密
  • 【C++前缀和 状态压缩】2588. 统计美丽子数组数目|1696
  • Springboot使用ThreadPoolTaskScheduler轻量级多线程定时任务框架
  • 网传阿里云盘出现bug,可看到其他用户云盘图片
  • VideoFileClip 切割视频
  • C#往压缩包Zip文件的文件追加数据
  • go注册中心Eureka,注册到线上和线下,都可以访问
  • 通过示例来展示C++中Lumda函数的原理是什么及如何来使用它?