JS--JavaScript字符串替换(replace()方法、正则表达式匹配、函数作为参数)详解

JavaScript字符串替换 JavaScript字符串替换 replace() 方法的第二个参数可以使用函数,当匹配时会调用该函数,函数的返回值将作为替换文本使用,同时函数可以接收以$为前缀的特殊字符,用来引用匹配文本的相关信息。 下面代码把字符串中每个单词转换为首字母大写形式显示。 示例1 var s = 'javascript is script , is not java.'; //定义字符串 //定义替换文本函数,... 阅读详情
AI摘要

本文深入探讨了使用replace()方法进行字符串替换的高级技巧,包括如何利用正则表达式、特殊字符和函数参数实现复杂的文本处理任务。

字符串替换

使用字符串的replace()方法可以实现字符串替换操作。该方法包含两个参数:
第一个: 表示执行匹配的正则表达式,也可以传递字符串
第二个: 表示准备代替匹配的子字符串

var s = "index.html";
var b = s.replace("html", "htm");

replace()方法同时执行查找和替换两个操作。该方法将在字符串中查找与正则表达式相匹配的子字符串,然后调用第二个参数值或替换这些子字符串。
如果正则表达式具有全局性质,那么将替换所有匹配子字符串,否则,只替换第1个匹配子字符串。

在replace()方法中约定了一个特殊的字符“$”,如果这个美元符号附加了一个序号,就表示引用正则表达式中匹配的子表达式存储的字符串。
示例:

var s = "javascript";
var b = s.replace(/(java)(script)/, "$2-$1");
document.write(b);	//"script-java"

在上面的代码中,正则表达式/(java)(script)/中包含两对小括号,按顺序排列,其中第一对小括号表示第一个子表达式,第二对小括号表示第二个子表达式,在replace()方法的参数中可以分别使用字符串 “$1” 和 “$2” 来表示对它们匹配文本的引用,当然它们不是标识符,仅是一个标记,所以不可以作为变量参与计算。

美元符号与其他特殊字符组合的含义:

  • $1、$2、…、$99:
    与正则表达式中的第1~99个子表达式相匹配的文本
  • $&(美元符号+连字符):
    与正则表达式相匹配的子字符串
  • $`(美元符号+切换技能键):
    位于匹配子字符串左侧的文本
  • $’(美元符号+单引号):
    位于匹配子字符串右侧的文本
  • $$:
    表示 $ 符号

由于字符串“$&”在replace()方法中被约定为正则表达式所匹配的文本,因此利用它可以重复引用匹配的文本,从而实现字符串重复显示效果。其中" /.*/ "表似乎完全匹配字符串

var s = "javascript";
var b = s.replace(/.*/, "$&$&");//"javascriptjavascript"

匹配左侧文本:字符"$&“代表匹配字符串“script”,字符” $ “代表匹配文本左侧文本"java”

var s = "javascript";
var b = s.replace(/script/, "$& != $`" );//"javascript != java

匹配右侧文本:其中字符"$&"代表匹配字符串“java”,字符“ $ ”代表匹配文本右侧文本“script”。然后用“ $& $’ is”所代表的字符串“Javascript is” 替换原字符串中的“java”子字符串,即组成一个新的字符串“javascript is script”。

var s = "javascript";
var b = s.replace(/java/, "$&$' is ");//"javascript is script"
函数作为replace()的参数

在ECMAScript3中明确规定,replace()方法的第二个参数建议使用函数,而不是字符串(当然字符串也可以用,没毛病),JavaScript1.2实现了对这个特性的支持。

这样当replace()方法执行匹配时,每次都会调用该函数,函数的返回值将作为替换文本执行匹配操作,同时函数可以接收以 $ 为前缀的特殊字符组合,用来对匹配文本的相关信息进行引用。

var s = 'script language = "javascript" type= " text / javascript"';
var f = function($1){
	return $1.substring(0, 1).toUpperCase() + $1.substring(1);
}
var a = s.replace(/(\b\w+\b)/g, f);
alert(a);

在这里插入图片描述
函数f()的参数$1表示正则表达式/(\b\w+\b)/g每次匹配的文本。然后再函数体内对这个匹配文本进行处理,截取其首字母并转换为大写形式,之后返回新处理的字符串。replace()方法能够在原文本中使用这个返回的新字符串替换每次匹配的子字符串。

对于上面的例子,可以使用小括号来获取更多匹配文本的信息。
例如:直接利用小括号传递单词的首字母,然后进行大小写转换处理。

var s = 'script language = "javascript" type= " text / javascript"';
var f = function($1, $2, $3){
	return $2.toUpperCase() + 43;
}
var a = s.replace(/\b(\w)(\w*)\b/g, f);//Script Language = "Javascript" Type = " Text /Javascript"

在函数f()中,第一个参数表示每次匹配的文本,第二个参数表示第一个小括号的子表达式所匹配的文本,即单词的首字母,第二个参数表示第二个小括号的子表达式所匹配的文本。

实际上,replace()方法的第二个参数的函数的参数是含蓄的,即使不传递任何形参,replace()方法依然会向它传递多个实参,这些实参都包含一定的意思,具体如下:

  • 第一个参数表示与匹配模式相匹配的文本,如上面示例中每次匹配的单词字符串
  • 其后的参数是与匹配模式中子表达式相匹配的字符串,参数个数不限,根据子表达式数而定
  • 后面的参数是一个整数,表示匹配文本在字符串中的下表位置。
  • 最后一个参数表示字符串自身。

可以将上例修改为如下形式:

var f = function(){
	return arguments[1].toUpperCase(0 + arguments[2];
}

如果不为函数传递形参,直接调用函数的arguments属性,同样能偶读取到正则表达式中相关匹配文本的信息你。

  • arguments[0]表示每次匹配的单词
  • arguments[1]表示第一个子表达式匹配的文本,即单词的首个字母
  • arguments[2]表示第二个子表达式匹配的文本,即单词的余下字母
  • arguments[3]表示匹配文本的下标位置,如第一个匹配单词“script”的下标位置就是0,依次类推
  • arguments[4]表示要执行匹配的字符串,这里表示“script language = “javascript” type= ” text /javascript""
var s = 'script language = "javascript" type= " text / javascript"';
var f = function(){
	for(var i = 0; i < arguments.length; i++){
		alert("第" + (i + 1) + "个参数的值:" + arguments[i]);
	}
}
var a = s.replace(/\b(\w)\b/g/, f);

在函数体中,使用for循环遍历arguments属性,每次匹配单词时,都会弹出5次提示信息,分别显示上面所列的匹配文本信息。其中,arguments[1]、arguments[2]会根据每次匹配文本不同,分别显示当前匹配文本中子表达式匹配的信息,arguments[3]显示当前匹配单词的下标位置。而arguments[0]总是显示每次匹配的单词,arguments[4]总是显示被操作的字符串。

例子:自动提取字符串中的分数,汇总后计算平均分

var s = "张三56分,李四74分,王五92分,赵六84分";
var a = s.match(/\d+/g), sum = 0;
for(var i = 0; i < a.length; i++){
	sum += parseFloat(a[i]);
};
var avg = sum / a.length;
function f(){
	var n = parseFloat(arguments[1]);
	return n + "分" + "(" + ((n > avg) ? ("超出平均分" + (n - avg)) : ("低于平均分" + (avg - n))) + "分)";
}
var s1 = s.replace(/(\d+)分/g, f);document.write(s1);

在这里插入图片描述

在上面的示例中,遍历数组时不能够使用for in语句,因为这个数组中还存储着其他相关的匹配文本信息。应该使用for语句来实现。由于截取的数字都是字符串类型,应把它们都转换为数值类型,否则会被误解,例如把数字连接在一起,或者按字母顺序进行比较等。

MATLAB图像加密实践:行列像素置乱与灰度值变换 图像加密是信息安全领域的重要分支,其核心目标在于保护视觉信息的机密性。其基本原理是通过特定算法对图像数据进行混淆,使其在视觉和统计特性上均与原始图像无关,从而抵御未经授权的访问与分析。从技术价值看,有效的图像加密方案不仅需要确保可逆解密,还需具备密钥敏感性和抗统计攻击能力,以满足实际应用中对安全性和可靠性的双重需求。在工程实践中,空间域加密因其直观和高效,常作为入门首选。其中,行列像素操作结合了置乱与替换策略,通过打乱像素空间位置并改变其灰度值,能有效破坏图像的相关性与统计特征。这种方案特别适合在MATLA 阅读详情

相关推荐

js中replace()函数的用法

方法接受两个参数:第一个参数是要替换的字符串或匹配的正则表达式,第二个参数是用于替换的新字符串或函数。如果第一个参数是字符串,则只会替换第一次出现的该字符串;我们传递了一个函数作为第二个参数,并将匹配到的字符串作为参数传递给该函数。函数返回值即为替换后的新字符串。函数是 JavaScript 字符串对象中的一个方法,用于将字符串中的一部分替换为新的字符串。函数不会改变原始字符串,而是返回一个新的替换后的字符串。

m0_63780299的博客 656

【JavaScript】详解JavaScript中的replace()函数

replace()函数详解

南栀的博客 8万+

H265/HEVC视频分层码流分析语义元素解释

一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。 二、H265分层结构 H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL

weixin_43876729的博客 9432

js中replace的用法

replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。为了帮助大家更好的理解,下面举个简单例子说明一下 Js代码 1.    <script language="javascript">    2. &...

十九万里的博客 4万+

CloudCompare

分割点云:选中要分割的点云文件–>Segment–>左键框出要分割的点或者区域–>Segment Out–>Comfirm Segmentation,原点云文件被分割成两个结构,选中分割出来的remaining,右键delete即可。qSRA (Surface of Revolution Analysis):计算一个点云和一个假定旋转平面之间的距离(旋转平面用2D轮廓定义),距离计算好后,用户可以创建一个偏差的2D图或者圆柱或圆锥的投影。②表现为同样的对象或者至少有同样的形状。

xiaoyaolangwj的博客 4709

CH340以及CH系列USB转串口驱动下载

在之前使用USB转串口时,很多时候大家可能会不知道去哪下载驱动,然后百度随便下载一个,但往往鱼龙混杂且版本不一,所以今天特意整理一下CH340驱动以及CH系列的官方驱动下载地址,方便大家进行下载也方便自己后期查找,所有链接皆指向官方下载链接,每次下载都可获取官方当前最新驱动。 CH340/CH341 Windows驱动下载链接:CH341SER.EXE下载链接 Linux驱动下载链接:CH341SER_LINUX.ZIP下载链接 Andr...

OIDCAT的博客 4万+

JS中的replace()配合正则表达式使用的方法

JS中的replace()配合正则表达式使用的方法 replace()方法的作用 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 replace()的语法 string.replace(regexp,replacement); 第一个参数regexp为:声明了要替换的模式的RegExp对象(正则表达式)。 第二个参数replacement为:一个字符串,声明的是替换文本或生成替换文本的函数,比如声明为",",那么匹配到的字符会被替换为"," replac

zzh1251994430的博客 3501

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 479

js的replace()方法

1. 单独使用replace() 例子: var str = "dogdogdog"; var str2 = str.replace("dog","cat"); console.log(str2); 输出为:catdogdog。这里仅替换第一个dog字符串。 注:js中是没有replaceAll方法的,那如何使用replace方法实现replaceAll的效果呢?? 1. 使用具有全局标志g的正则表达式 例子: var str = "dogdogdog"; var str2 = st.

chenchuwai的博客 2万+

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2624

十分钟搞定! DeepSeek本地部署详细指南!

保姆级教程,三步搞定deepseek本地部署,不求人!

一个喜欢诗和远方的程序媛 4347

js字符串replace替换多个_jsstring/正则表达式replace方法详解

replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。语法:stringObj.replace(regexp/substr,replacement);第一个参数:必需。字符串中要替换的子串或正则RexExp;第二个参数:必需,一个字符串值,规定了替换文本或生成替换文本的函...

weixin_39947812的博客 1万+

推荐系统中召回率Recall计算方式附代码

Recall(召回率)是指在所有实际有交互的用户 - 物品对中,推荐系统成功预测出的比例。具体来说,设所有有交互的用户 - 物品对为S,推荐系统预测出的用户 - 物品对为T,则Recall的计算公式为:

优快云 精品推荐 1842

JS替换部分或全部文字,字符串replace() 方法总结

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 语法 stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 R...

qq_15560295的博客 7043

fatal: unable to access ‘https://github.com/Stability-AI/stablediffusion.git/‘解决方案

本文主要介绍在安装 stable-diffusion-webui 时出现的 fatal: unable to access 'https://github.com/Stability-AI/stablediffusion.git/': Failed to connect to github.com port 443 after 21071 ms: Couldn't connect to server 问题的解决方案,希望能对你有所帮助。

水滴的博客 5686

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Js-正则替换字符串replace()方法超详细用法

replace方法它接收一个正则表达式作为第一个参数, 接收一个替换字符串作为第二个参数。 它搜索调用它的字符串, 寻找与指定模式匹配的文本。 如果正则表达式带g标志, replace()方法会替换字符串中的所有匹配项; 否则, 它只替换第一个匹配项。 如果replace()方法的第一个参数是一个字符串而非正则表达式, 这个方法会按照字面值进行搜索。 简单用法 let text = 'my nam

qq_45458749的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JS字符串替换(使用replace()方法)

replace() 方法的第二个参数可以使用函数,当匹配时会调用该函数,函数的返回值将作为替换文本使用,同时函数可以接收以$为前缀的特殊字符,用来引用匹配文本的相关信息。

unber的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

js字符串替换replace()

在js中字符串替换使用函数replace()生成的是一个新的字符串,切记是生成一个新的字符串! 先看来自w3cschool的解释: 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 语法 stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/su...

daxia5398的博客 799

正则替换字符串replace()方法超详细用法

正则替换字符串replace()方法超详细用法

路人贾! 1万+

js的字符串替换函数replace

最近用js写了一个模板替换的函数,传入一个对象和一个模板字符串,将模板中对应的变量替换成对应的值,这个功能很简单,遍历一下对象,然后使用js自带的replace函数进行替换,写好后,一开始觉得挺好用的,也没出什么bug,后来就需要加参数的时候,就加上一个变量、对象,就替换好了,但是后来发现有个地方替换不了了,调试了好久,一直找不到什么原因,就查了一下文档,原来是replace有分部分替换和全部替换

菜鸟一名 5421

js replace不改变原str_JavaScript的String类型replace()方法

JavaScript字符串的replace()方法介绍为了简化替换子字符串的操作,ECMAScript提供了replace()方法。这个方法接收两个参数:第一个参数:必需。可以是一个字符串(这个字符串不会转换成正则表达式)或者是一个RegExp函数。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,并且要指定全局g标志。第二个参数:必需。是...

weixin_42499100的博客 1999

javascript中字符串替换函数replace()方法详解

在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。  replace()最简单的算是能力就是简单的字符替换。示例代码如下:var strM = "javascript is a good script language";//在此我想将字母a替换成字母Aalert(strM.repla

liaozhiweihaifeng的专栏 883

JavaScript(JS) 正则表达式分组匹配提取替换字符串(回调函数)

JavaScript(JS)中使用正则表达式可以实现匹配到的字符串进行提取和替换,并且可以每次匹配执行一个回调函数进行处理,本文主要介绍JavaScript(JS) 正则表达式分组匹配提取替换字符串的方法,以及相关的示例代码。

weixin_52026996的博客 1225

js 字符串替换replace()详解

1. replace()方法:替换字符串 JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符,如:例1. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志),如:例2。  例:1 var stringObj="我是一名大学生,大学生"; //替换错别字“大学生”为“医生”

u012964143的专栏 1770

Javascript替换示例|Javascript字符串Replace()方法

一:Javascript替换示例|Javascript字符串Replace()方法 目录一:Javascript替换示例|Javascript字符串Replace()方法1:Javascript字符串replace()(==替换某个字符串==)2:Javascript替换正则表达式匹配(==替换中括号==)3:替换JavaScript中子字符串的多次出现(==替换多次出现的数据==)4:Javas...

qq_41974199的博客 574
上一篇: JS--JavaScript增强数组排序(根据奇偶性排序、整数浮点数分开排序)
下一篇: JS--JavaScript操作BOM(浏览器对象模型、window对象概述、window.open()方法打开窗口)
吴声子夜歌
博客等级 码龄9年 2688粉丝 2270原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值