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

devtools/2024/9/29 17:07:16/

目录

1 JSON 字符串化和解析

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

3. 解析并返回DOM 树结构

4. 解析带有层级的文本


1 JSON 字符串化和解析

javascript">//  <!-- 实现一个函数,能够将自定义格式的字符串转换为 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 }。

javascript">//遇到左括号 递归 处理去掉逗号后 去掉冒号 第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 树结构。

javascript">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. 解析带有层级的文本

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

javascript">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.ppmy.cn/devtools/118789.html

相关文章

大模型训练技术:使用QLM提升Qwen2-7B 128k训练效率3.4倍

大模型训练技术&#xff1a;使用QLM提升Qwen2-7B 128k训练效率3.4倍 原创 一、引言 自Transformer架构问世以来&#xff0c;大模型领域的进展如火如荼&#xff0c;短短几年内&#xff0c;模型参数规模已攀升至天文数字&#xff0c;轻松跨过万亿门槛。面对如此庞然大物&#…

物理学基础精解【24】

文章目录 行列式行列式的主要性质行列式按行展开逆序对换行列式计算中的应用逆序的定义逆序在行列式中的应用例子逆序在行列式计算中的作用例子例题逆序在行列式计算中起着决定性作用例子说明 逆序在行列式计算中起着至关重要的作用确定行列式每项符号计算行列式值的基础应用实…

二叉树之堆树

堆树是一种完全二叉树&#xff0c;完全二叉树特点&#xff1a;除了最后一层所有层都填满&#xff0c;最后一层节点从左到右排列。堆树分为两种类型&#xff1a;大顶堆和小顶堆。 大顶堆&#xff1a;每个节点的值都大于或等于其子节点的值&#xff0c;根节点是最大值。 小顶堆…

ACM第三次考核题解

ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题&#xff01;&#xff01;&#xff01;输出2迷之难度F神说要有光&#xff0c;于是有了手电筒贪心3简单BThis is a real English problem&#xff01;思维 英语4简单C玩具简单排序5简单I“近义词…

Python库matplotlib之二

Python库matplotlib之二 figureAxessubplot figure matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, FigureClass<class ‘matplotlib.figure.Figure’>, clearFalse, **kwargs) num&#xff0c;int 或 str 或 fi…

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

计算机视觉领域顶级会议 European Conference on Computer Vision&#xff08;ECCV 2024&#xff09;将于9月29日至10月4日在意大利米兰召开&#xff0c;快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…

JAVA秘密花园匿名情侣假装恋爱体验系统小程序源码

秘密花园&#xff1a;匿名情侣假装恋爱体验系统&#xff0c;解锁爱情新奇遇&#x1f339; &#x1f33f; 开篇&#xff1a;踏入未知的爱情秘境 在繁忙的都市生活中&#xff0c;你是否渴望一场不期而遇的浪漫&#xff1f;是否想尝试一段没有负担、纯粹美好的恋爱体验&#xff…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.第N次还是消费到1-5.如果是false。那么第一次消费1-3,第二次消费4-5:默认是true:我们…