我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JS的String.raw方法怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JS的String.raw方法怎么使用

本篇内容介绍了“JS的String.raw方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

String.raw

String.raw是JavaScript中模板字符串的一个标签函数,它的作用是将模板字符串不转义的原始字符串内容返回

也就是说,如下代码:

console.log(String.raw`Hi!\nAkira`);

将直接返回字符串 Hi!\nAkira,而不是在Hi!Akira中间插入回车。因为String.raw标签存在,所以\n不被转义。这样其实相当于如下代码:

console.log(`Hi!\\nAkira`);

原始字符串不转义,在某些情况下很有用。不知道大家有没有遇到过用new RegExp动态构建正则表达式的场景,比如下面的代码构建一个浏览器默认块级元素标签的正则匹配:

const blockTags = 'address|article|aside|base|basefont|blockquote|body|caption'+ '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'+ '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'+ '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'+ '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'+ '|track|ul';const blockReg = new RegExp(`(<\\s*(?:(?:\\/\\s*(?:${blockTags})\\s*)|(?:(?:${blockTags})\\s*\\/\\s*)|hr)>\\s*?)\\n`, 'ig');

在这里,因为我们使用了new RegExp动态构建,所以我们就要把\s替换成\\s,把\/替换成\\/,把\n替换成\\n。但如果使用String.raw,就可以不用这么替换,可以直接写成:

const blockReg = new RegExp(String.raw`(<\s*(?:(?:\/\s*(?:${blockTags})\s*)|(?:(?:${blockTags})\s*\/\s*)|hr)>\s*?)\n`, 'ig');

除了动态构建正则,还有输出或执行代码块的场景,比如:

const script = `    console.log('test \n test');`execScript(script);

上面这段代码执行会出错,因为\n在字符串字面量中被替换成换行,导致实际执行的代码变成下面这样:

console.log('test  test');

因为单引号字符串里面不能插入换行,所以上面的代码执行就报错了。

解决的办法是:

const script = String.raw`    console.log('test \n test');`execScript(script);

这样就可以避免字符串代码的转义内容被解析。

所以,从上面可以看出,在字符串解析的场景下,String.raw就会有用。比如我们要写一个使用KaTeX解析公式的React组件,我们希望这么使用:

<Katex macros={{...}}>    公式字符串</Katex>

具体实现我们可以这样写:

import katex from 'katex';import React from 'react';import ReactDOM from 'react-dom'; const Katex = ({children, ...props}) => {  const code = katex.renderToString(children, {    ...props,    throwOnError: false  })  return (    <span dangerouslySetInnerHTML={{__html: code}}/>  )}

对于单行公式的解析没有问题

<Katex>x^2+y^2=1</Katex>

能够正确解析成:x2+y2=1x^2+y^2=1x2+y2=1

但是如果是多行公式:

<Katex macros={{"\\f": "#1f(#2)"}}>% \f is defined as #1f(#2) using the macro\f\relax{x} = \int_{-\infty}^\infty    \f\hat\xi\,e^{2 \pi i \xi x}    \,d\xi</Katex>

这么写是不行的,因为React在解析JSX的时候,会把内容中的回车去掉,空格合并,就像浏览器解析HTML标签那样,而且也不能正确处理转义符。所以如果像上面这么写,最后浏览器会报错。

这时候,我们就可以使用String.raw标签,将上面的代码写成下面这样:

<Katex macros={{"\\f": "#1f(#2)"}}>{String.raw`% \f is defined as #1f(#2) using the macro\f\relax{x} = \int_{-\infty}^\infty    \f\hat\xi\,e^{2 \pi i \xi x}    \,d\xi`}</Katex>

这样KaTeX就能正确解析字符串内容了,最终实现效果如下:

JS的String.raw方法怎么使用

自定义标签

除了默认的String.raw,我们自定义的标签函数,也可以通过strings.raw来获得原始字符串内容,所以我们也可以将KaTeX公式解析定义成标签函数:

function KaTeX(strings, macros) {  return katex.renderToString(strings.raw.join(''), {    macros,    throwOnError: false  });}

这样我们就可以通过标签函数来解析公式,再用React渲染出来:

JS的String.raw方法怎么使用

“JS的String.raw方法怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JS的String.raw方法怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JS的String.raw方法怎么使用

本篇内容介绍了“JS的String.raw方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!String.rawString.raw
2023-07-02

js的slice方法怎么使用

JavaScript中的slice()方法用于从数组、字符串或类数组对象中提取指定范围的元素,并返回一个新的数组。语法:array.slice(start, end)参数:- start:可选,指定从哪个索引位置开始提取元素,默认为0,如果
2023-08-29

JS的replace方法怎么使用

replace方法是用来替换字符串中指定的子字符串并返回一个新的字符串。它接受两个参数,第一个参数是要被替换的子字符串或正则表达式,第二个参数是用来替换的新字符串或者一个函数。例如,可以使用replace方法来替换字符串中的所有空格为下划
JS的replace方法怎么使用
2024-03-01

js split方法怎么使用

JavaScript中的`split()`方法是用来将一个字符串拆分成一个字符串数组的方法。它接受一个分隔符作为参数,然后根据该分隔符将字符串拆分成多个子字符串,并返回一个字符串数组。以下是`split()`方法的使用方法:```javas
2023-08-26

js中的Array.reduce方法怎么使用

这篇文章主要介绍“js中的Array.reduce方法怎么使用”,在日常操作中,相信很多人在js中的Array.reduce方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中的Array.red
2023-07-05

js中的Object.create方法怎么使用

这篇文章主要介绍“js中的Object.create方法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js中的Object.create方法怎么使用”文章能帮助大家解决问题。ECMAScri
2023-07-04

js中history.back方法怎么使用

在JavaScript中,可以使用history.back()方法来返回用户上一页的浏览历史记录。使用方法如下:history.back();当调用history.back()方法时,浏览器会自动返回到用户的上一页浏览记录。如果没有上一
js中history.back方法怎么使用
2024-02-29

JS中hasOwnProperty()方法怎么使用

JavaScript中的hasOwnProperty()方法用于检查一个对象是否具有特定的属性。它是通过原型链来判断的,只有当对象自身具有该属性时,才返回true。使用方法如下:1. 通过点表示法:```javascriptvar obj
2023-09-13

js之slice()方法怎么使用

slice()方法用于从数组中提取指定的元素,并返回一个新的数组。它接受两个参数,即开始索引和结束索引(可选)。语法:arr.slice(startIndex, endIndex)参数说明:- startIndex:必需。表示开始提取元素的
2023-09-13

js中Window setTimeout()方法怎么使用

在JavaScript中,`setTimeout()`方法用于延迟执行一个函数或者一段代码。它接受两个参数:第一个参数是要执行的函数或者代码块,第二个参数是延迟的毫秒数。以下是`setTimeout()`方法的使用示例:```javascr
2023-10-10

JS getRandomValues和Math.random方法怎么使用

这篇文章主要讲解了“JS getRandomValues和Math.random方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS getRandomValues和Math.ra
2023-07-06

join()方法怎么在js中使用

今天就跟大家聊聊有关join()方法怎么在js中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、说明join方法能把数组序列转换为字符串, join方法后面可以跟match方法
2023-06-15

js中Window clearTimeout()方法怎么使用

在JavaScript中,window.clearTimeout()方法用于取消之前通过window.setTimeout()方法设置的定时器。它接受一个定时器标识符作为参数,以取消相应的定时器。下面是使用window.clearTimeo
2023-09-22

js中Window location.reload()方法怎么使用

在JavaScript中,可以使用`window.location.reload()`方法来重新加载当前页面。该方法不接受任何参数。```javascriptwindow.location.reload();```该方法会重新加载当前页面,
2023-10-10

js中matchAll()方法的使用方法

本篇内容介绍了“js中matchAll()方法的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明1、matchAll()方法返回一
2023-06-20

js中arguments的使用方法

本篇内容主要讲解“js中arguments的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js中arguments的使用方法”吧!说明1、当不确定传递了多少参数时,可以使用argumen
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录