资讯专栏INFORMATION COLUMN

javascript replace方法

codercao / 3131人阅读

摘要:字符串方法还是比较强大的,做个笔记总结。美元符号连字符与正则表达式相匹配的子字符串。美元符号单引号位于匹配子字符串右侧的文本。否则,第至个参数对应为捕获组匹配项,倒数的两个参数为匹配下标,原串。函数的匹配返回值,作为每次的匹配替换值。

javascript字符串方法replace还是比较强大的,做个笔记总结。

第一个参数

replace的第一个参数为字符串或者正则表达式。第二个参数为替换符,或者一个回调函数。

javascript"aadbbbd".replace("a","1")
//"1adbbbd"
"aadbbbd".replace(/a/,"1")
//"1adbbbd"
第二个参数

1.第二个参数为特殊符号

$1、$2、…、$99:与正则表达式中的第1~99个子表达式相匹配的文本。其实也可以在1-9之间,加上0前缀。
该符号针对的是分组,所以,没有分组的话,会被当做$n字符来做替换。

$&:(美元符号+连字符):与正则表达式相匹配的子字符串。

$`:(美元符号+切换技能键):位于匹配子字符串左侧的文本。

$":(美元符号+单引号):位于匹配子字符串右侧的文本。

$$:表示$符号。

代码示例:

javascript"中国人民".replace(/(中国)/g,"($1)")
//"(中国)人民"
"cdab".replace(/(ab)/g,"$`")
//"cdcd"
"abcd".replace(/(ab)/g,"$"")
//"cdcd"
"abcdabcd".replace(/(ab)/g,"[$&]")
//"[ab]cd[ab]cd"
"$1$2wa,test".replace(/[a-zA-z]/g,"$$");
//"$1$2$$,$$$$"

如果有10个分组,但是我想在匹配第一个分组的后面加个0,怎么办?
也就是说,怎么让js去做10和1的区分?

用事实说话:

javascript"abcdefghijkkkk".replace(/(a)/g,"$10")
//"a0bcdefghijkkkk"

"abcdabcd".replace(/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/g,"$10")
//"jkkkk"

这个有点为难了,但是却难不倒函数啊!

2.第二个参数为函数

如果第二个参数传入函数,那么,正则表达式没有定义捕获组的情况下,默认为三个参数,分别为:matched(匹配子串),匹配下标,原串(originalText)。否则,第2至n个参数对应为捕获组匹配项,倒数的两个参数为:匹配下标,原串(originalText)。

函数的匹配返回值,作为每次的匹配替换值

javascript"123".replace(/d/g,function(m1,m2,m3){
  return m3+"#"
})
//"123#123#123#"
"abcdeffffdabc12323abc".replace(/[abc]/g,function(matched,index,originalText){
  return matched+"~"
})
//"a~b~c~deffffda~b~c~12323a~b~c~"
"abcdeffffdabc12323abc".replace(/[abc]/g,function(matched,index,originalText){
  return "~"
})
//"~~~deffffd~~~12323~~~"
"abcdeabc".replace(/[ab]/g,function(matched,index,originalText){
  return "["+index+"]";
})
//"[0][1]cde[5][6]c"

接下来,我们来做个题目,要求对一个串的重复部分进行替换处理,比如:abcabcaabbbdd,该串中abc紧接着abca后紧接着a,无论重复多少次,我们都用#替换掉。

javascript//因为有一个捕获组,所以,需要再传递1参数 $1
"abcaabbccccffffdabcabcef".replace(/(w+)1+/g,function(matched,$1,index,originalText){
   return "#";
})
//"abc#####ef"

如果只是保留非重复部分,也就是紧连接的aaa,只需要保留a即可。那么我们可以这么改:

javascript"abcaabbccccffffdabcabcef".replace(/(w+)1+/g,function(matched,$1,index,originalText){
   return $1;
})
//"abcabccdabcef"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78177.html

相关文章

  • 一道小小的题目引发对javascript支持正则表达式相关方法的探讨

    摘要:返回值返回值根据传入的参数类型和规则的不同,返回的内容不同,但总体来说,它是返回一个对象,而不是索引,如果没匹配到任何符合条件的字符串,则返回。 本文发布在我的博客一道小小的题目引发对javascript支持正则表达式相关方法的探讨许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。 以前对于正则是非常惧怕的,因为看不懂和学不会。但最近项目中频繁的...

    Scholer 评论0 收藏0
  • 来一轮带注释的demo,彻底搞懂javascript中的replace函数

    摘要:对应于上述的,等。匹配到的子字符串在原字符串中的偏移量。插入当前匹配的子串右边的内容。 javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用。最近和前端走的比较近,借此机会,好好巩固一下相关知识点。 1.初识replace 在js中有两个replace函数 一个是lo...

    Coding01 评论0 收藏0
  • JavaScript 正则表达式笔记

    摘要:元字符是在正则表达式中有特殊含义的非字母字符。五前瞻后顾后瞻正则表达式从文本头部向尾部开始解析,文本尾部方向,称为前。前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾后瞻方向相反。替换与正则表达式匹配的子串。 Regular Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。按某种规则去匹配符合条件的字符串。不同编程语言的正则表达式略有不同...

    jeffrey_up 评论0 收藏0
  • 100个直接可以拿来用的JavaScript实用功能代码片段(重新排版+目录浏览)

    摘要:来自本文原作者发表于由于浏览器及的快速迭代发展,以下部分代码功能可能会失效过时或者不够优雅还请看官自行斟辨。重新使用排版,且自动生成了目录方便浏览。 来自:http://www.cnblogs.com/wxydigua/p/3314274.html 本文原作者发表于:2013-09-11, 由于浏览器及ECMAScript的快速迭代发展,以下部分代码功能可能会失效、过时或者不够优雅, ...

    willin 评论0 收藏0
  • JavaScript必会技能——正则表达式

    摘要:语法参数必填项,字符串或正则表达式,该参数指定的地方分割可选该参数指定返回的数组的最大长度,如果设置了该参数,返回的子字符串不会多于这个参数指定的数组。该数组通过在指定的边界处将字符串分割成子字符串。把正则表达式拆分成小表达式。 正则表达式是什么 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 为什么使用正则表达式 测试字符串内的模式。例如,可以测试输入字符串...

    FrozenMap 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<