手动实现JavaScript模板字符串

JS Date 格式化实战:5种方法实现 yyyy-MM-dd HH:mm:ss 并对比性能 本文详细介绍了JavaScript中5种实现`yyyy-MM-dd HH:mm:ss`日期格式化的方法,包括手动拼接、国际化API、模板字符串及第三方库方案,并进行了性能对比测试。通过实际数据展示各方法的优缺点,帮助开发者根据项目需求选择最优方案,提升前端日期处理效率。 阅读详情

1. 首先建立render函数挂载在String的原型上

// data参数是一个对象,会将其中的属性值替换到字符串中
String.prototype.render = function(data = {}) {}

2. 使用正则表达式查找占位符 {{ name }}

String.prototype.render = function(data) {
    /*
        regExp: /{{[.\s\S]*?}}/g
        用于匹配{{}}包括的所有内容,包括换行,因为要支持在其中放置js代码
        此时回调参数match代表的是匹配到的字符串,返回后的数据会将匹配到的字符串替换
    */
    return this.replace(/{{[.\s\S]*?}}/g, match => {});
}

3. 编写render内部代码

    // 将{{}}一对大括号过滤掉并赋值给match,并且去除首尾空格,如果去除以后内容是空,那么替换成空字符串
if((match = match.substring(2, match.length - 2).trim()) == "") {
    return "";
} else if (match.startsWith("#")) {
    // 如果开头是#,那么被认为是js代码,使用eval执行,其中使用变量需要 data.变量名
    return eval(match.substr(1, match.length - 1));
} else {
    // 否则被认作为普通变量,使用data中的属性替换
    return data[match] ? data[match] : "";
}

/*
    这里将js代码和普通变量使用判断分开,避免普通变量也使用eval影响效率
*/

4. 成品

String.prototype.render = function(data) {
    return this.replace(/{{[.\s\S]*?}}/g, match => {
        if ((match = match.substring(2, match.length - 2).trim()) == "") {
            return "";
        } else if (match.startsWith("#")) {
            return eval(match.substr(1, match.length - 1));
        } else {
            return data[match] ? data[match] : "";
        }
    })
}


const data = {
    name: "小明",
    age: 16,
    school: "第三中学",
    classroom: "教室2"
}


console.log(
    "{{ name }} 今年 {{ age }} 岁,就读于 {{ school }} 今天在 {{ classroom }} 上课,{{ name }} {{ #data.age >= 18 ? '成年了' : '未成年' }}".render(data)
);
// 小明 今年 16 岁,就读于 第三中学 今天在 教室2 上课,小明 未成年

console.log(
    `{{name}}说了句{{#
        if (data.age >= 18) {
            "我已经成年了!"
        } else {
            "我还没有成年!"
        }
    }}`.render(data)
);
// 小明说了句我还没有成年!

 

深入解析JavaScript中的模板字符串 标签模板函数可以对插入的变量或表达式进行自定义处理,这使得模板字符串在格式化、转义等方面具有更大的灵活性。}, '');// 输出 "hello, WORLD!模板字符串是JavaScript中一种强大且灵活的字符串表达方式,它简化了字符串的拼接和格式化操作,提高了代码的可读性和可维护性。通过深入理解和熟练掌握模板字符串的使用技巧,我们可以编写出更加优雅、高效的JavaScript代码。以上就是对JavaScript中模板字符串的详细讲解和使用指南。 阅读详情

相关推荐

JavaScript 模板字符串的高级用法:标签模板与多行字符串

本文深入解析ES6模板字符串的高级用法。主要内容包括:1)基础语法回顾,通过对比传统字符串展示模板字符串在换行、变量插值等方面的优势;2)多行字符串处理技巧,提供SQL查询构建、HTML模板生成等实际应用示例;3)标签模板的深入解析,包括参数传递机制和实现原理;4)高级应用场景,如HTML安全转义、国际化支持和样式组件实现;5)性能优化策略,通过缓存机制提升执行效率。文章全面展示了模板字符串在现代JavaScript开发中的强大功能和应用价值。

记录学习的过程 1306

手写JS系列-字符串模板

我们知道在ES6中,新增了反引号语法,使得反引号中可以插入变量,解析时可以将变量替换成实际值并且拼接到字符串中。这种模板字符串中变量的识别可以手写一个函数来简单实现: function render(template, data) { const reg = /\{\{(\w+)\}\}/ if(reg.test(template)) { const name = reg.exec(template)[1] template = template.replace(reg, data[

Hoshizola的博客 526

JavaScript 字符串模板的简单实现

JavaScript 字符串模板是一种方便的字符串拼接方式,它允许我们在字符串中插入变量、表达式或函数调用,并以一种更优雅和可读的方式生成最终的字符串结果。在本文中,我将向您展示如何实现一个简单的 JavaScript 字符串模板。的函数,它接受一个字符串模板和需要插入的值作为参数。模板字符串使用了 ES6 中的模板字面量语法,其中插入的变量或表达式使用。实现一个简单的字符串模板可以通过多种方式,其中一种常见的方法是使用正则表达式进行匹配和替换。最终,通过累加的方式生成最终的字符串结果。

CyberOI的博客 112

js手写模板字符串

js手写模板字符串 let str = '#${name}是手写${name1}!#' let obj = { name:"张三", name1:"模板字符串" } function strX (str,obj){ if(/^#.*#$/.test(str)){ str =str.replace(/#/g,"") return str.replace(/\$\{(.*?)\}/g,(v,key)=>{ // v => ${name} key => na

qq_42468132的博客 349

string-replace-async:异步String.prototype.replace()

字符串替换异步 知道如何等待的“ string” .replace()函数 安装 $ npm install string-replace-async 用法 let replaceAsync = require ( "string-replace-async" ) ; await replaceAsync ( "#rebeccapurple" , / # ( \w + ) / g , async ( match , name ) => { let color = await getColorByName ( name ) ; return "#" + color + " (" + name + ")" ; } ) ; 为什么 假设您有一个用各自的十六进制代码替换颜色名称的任务。 let spec = "I want background to be #papayawhip and

Windows 11 上 WSL2 安装 Ubuntu 22.04 保姆级教程(含桌面环境配置)

本文提供在Windows 11上通过WSL2安装Ubuntu 22.04并配置桌面环境的详细教程。涵盖WSL2核心安装、性能调优、Xfce桌面环境部署以及开发环境集成,帮助开发者构建高效、无缝的Windows-Linux混合开发工作站。

Jerry的专栏 633

JavaScript 学习-12.模板字符串(Template Strings)

前言 JavaScript 在ES6 新增了模板字符串(Template Strings)语法,其作用是可以在字符串中换行,以及将变量和表达式插入字符串。 Internet Explorer 不支持模板字面量。 模板字符串(Template Strings) 模板字面量使用反引号 (``) 而不是单引号 (‘’) 或双引号 (“”) 来定义字符串 let a = `这个是一个模板字符串`; console.log(a); let b = `Hello World!`; console.log(b);

qq_27371025的博客 1035

服务器测试之intel E8102CQDA2

网卡性能 iperf E810

qq_41897488的博客 2504

如何在 JavaScript 中的字符串的字符之间添加空格

在今天的文章中,我们将学习如何轻松地在 JavaScript 中的字符串字符之间包含空格。1. String split() 和 Split join() 方法要在字符串的字符之间添加空格,请对字符串调用 split() 方法以获取字符数组,然后对该数组调用 join() 方法以使用空格分隔符连接字符。例如:function addSpace(str) { return str.split('...

web前端开发 3722

Python接口自动化测试实战:Requests+Pytest+Excel+Allure框架搭建指南

接口自动化测试是现代软件工程中保障软件质量的关键实践,其核心原理是通过脚本模拟客户端请求,自动验证API的功能、性能和可靠性。在Python技术栈中,Requests库以其简洁的API成为处理HTTP请求的基石,而Pytest框架则凭借其灵活的Fixture机制和强大的参数化功能,为测试用例的组织与执行提供了优雅的解决方案。结合Excel进行数据驱动测试,能够有效实现测试数据与脚本逻辑的分离,提升协作效率;最终通过Allure生成可视化测试报告,清晰呈现测试结果与过程。这套技术组合(Requests, Py

weixin_28677451的博客 304

数字IC笔记-逻辑单元库和库文件

逻辑单元库的建立: 一个完整的单元库是由不同的功能电路所组成,在芯片应用中可分为三类: 标准单元:反相器、与门、寄存器、选择器、全加器。组合逻辑电路和时序逻辑电路。互补,反向,非反向,其他。锁存器、寄存器。 模块宏单元:ROM、RAM 输入输出单元 库文件: 在逻辑综合产生门级网表和物理设计做布局布线的过程中需要两个重要的库文件,就是物理库(lef)和时序库(lib) 1.物理库LEF文件 LEF是版图级的抽象文件,主要用于布局和布线。目前普遍使用的是由Candence开发的LEF文件格式,以le

sinat_41774721的博客 9140

js实现字符串模板

这时我们发现,一个功能里使用了两次循环和一次if判断,在字符串长度足够长,并且需要替换属性足够多的情况下,这效率简直不忍直视,并且这正则表达式的写法也丑到飞起。进行查找,使用while循环当还存在时就继续,否则当不存在时输出null会跳出while循环。通过RegExp动态生成的正则表达式,循环obj中的属性名,在字符串中对应查找,并且进行替换。给定一个字符串和一个对象,要求使用对象中的属性值替换字符串中对应位置的字符。之后通过for in 循环obj中的属性名,当获取相同属性名时,进行替换。

qq_50541792的博客 1191

OpenWRT二级路由DHCP客户端配置:实现IPv4 WAN自动获取与网段隔离

本文详细讲解了如何将OpenWRT配置为二级路由器,重点在于设置其WAN口为DHCP客户端以自动获取IPv4地址,并修改LAN口网段实现与上级网络的隔离。文章提供了从网络拓扑规划、具体配置步骤到防火墙设置的完整指南,并分享了常见问题排查与避坑经验,帮助用户构建稳定且功能独立的家庭网络环境。

weixin_29268267的博客 293

JavaScript之填充字符串五种方法

在 JS开发中,填充字符串是一个常见的操作,用于在字符串的开头或结尾添加特定字符,使其达到所需的长度。本文将介绍几种实现字符串填充的方法,包括内置方法和一些手动实现的方式。

呼叫6945的博客 1864

linux内核学习(一)---内核社区介绍及补丁提交

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制 本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交

文艺小少年的博客 536

AgentScope 实战训练营-7 种多智能体协作模式详解

本教程基于阿里巴巴开源的AgentScope Java框架,系统讲解多智能体系统的开发方法。涵盖7种核心协作模式:Pipeline流水线、Routing路由、Handoffs智能体交接、Supervisor监督器、Subagent子智能体、Skills技能系统及Workflow工作流。详细阐述ReActAgent、AgentScopeAgent、StateGraph等核心概念,提供完整的配置示例与代码实现,帮助开发者快速掌握基于Spring AI Alibaba的多智能体应用开发。

program哲学 162

thymeleaf的遍历拼接字符串_一行代码实现一个简单的模板字符串替换

作者:微醺岁月https://segmentfault.com/a/1190000013516128起始同许多初学 Javascript 的菜鸟一样,起初,我也是采用拼接字符串的形式,将 JSON 数据嵌入 HTML 中。开始时代码量较少,暂时还可以接受。但当页面结构复杂起来后,其弱点开始变得无法忍受起来:书写不连贯。每写一个变量就要断一下,插入一个 + 和 "。十分容易出错。无法重用。...

weixin_39636609的博客 791

Python爬虫抓取淘宝商品详情页信息:从入门到高级技术应用

通过本篇博客,我们了解了如何使用Python爬虫抓取淘宝商品详情页的信息,如何使用requests和Selenium抓取静态和动态内容,如何应对淘宝的反爬虫机制,如何将抓取的数据保存到CSV文件等。随着爬虫技术的不断发展,开发者可以根据需要选择合适的工具和技术,如使用分布式爬虫框架提高抓取效率,或者利用OCR技术处理验证码等问题。在进行淘宝爬虫时,需要注意遵循相关法律法规和平台的爬虫政策,避免对平台造成过度的负担或侵犯其合法权益。

2201_76125261的博客 460

JavaScript 字符串 - String 标签模板的 raw 属性(String 标签模板、raw 属性核心特点、String.raw() 方法、应用场景)

JavaScript 字符串 - String 标签模板的 raw 属性(String 标签模板、raw 属性核心特点、String.raw() 方法、应用场景)

weixin_52173250的博客 1132

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何应用前端页面模板doT

我想问大家个问题,在数据交互的时候有没有被拼接html字符串弄得头晕转向心情瞬间不好不好的?我就是这样,所以找了一个快速开发更高效而且心情依然很美丽的方法,那就是题目中的doT咯。下面来讲讲怎么用吧,首先要将doT.js这个js文件引入你的html中,https://github.com/ol...

chunlian3744的博客 245

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

告别丑陋代码:使用String.dedent优化多行字符串的3个实战案例

在JavaScript开发中,处理多行字符串时常常会遇到缩进混乱的问题,导致代码可读性差且难以维护。**String.dedent**作为TC39提案中的新功能,旨在通过自动移除多行模板字符串中的公共前导缩进,让代码变得更加整洁优雅。本文将通过3个实战案例,展示如何利用这一工具解决实际开发中的痛点。 ## 📌 案例1:消除模板字符串中的多余缩进 传统多行模板字符串在使用时,往往需要手动调整缩

gitblog_00893的博客 821

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vue2.0 组件实现动态模板(即Template)

从这篇文章得到启发 先定义一个组件从外部接收Template,然后在组件里调用 <template > <div ref="markedContent"></div> </template> <script> import Vue from 'vue/dist/vue.esm.js' export default { name: 'wf-marked-content', props: ['content'], mounte..

lee576的专栏 9695

JS——模板字符串

JS——模板字符串

Z_B_L的博客 5310

如何在JavaScript中实现字符串模板替换

当项目规模较大或需要更高级的功能时,考虑构建一个自定义的模板引擎可能是明智的选择。这样的引擎可以根据预定义的规则解析模板文件,动态生成最终的输出内容。虽然这需要更多的前期投入,但能够显著提高代码的可复用性和扩展性。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1463

JavaScript模板字符串

JavaScript模板字符串 字符串插值 模板字符串标签函数

CSPsy的博客 1万+

如何在JavaScript中实现字符串模板替换?

如何在JavaScript中实现字符串模板替换?

商务合作欢迎私信我 1万+
下一篇: Ant-Design-Vue 瘦身
@horizon007
博客等级 码龄5年 3粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值