美文网首页
js的字符串替换函数

js的字符串替换函数

作者: 江枫 | 来源:发表于2014-10-08 20:47 被阅读271次

javascript吸引我的一个地方:

总能在别人的代码中看到另一个javascript。

好2

这不,好戏来了,

var i=0 while(/abc/g.exec('abcabc')) i++
问, i 是多少?

当你发现RegExp对象用一个lastIndex属性记录下次匹配的起始位置时,你会逗比的一笑,要多2才会写出上面的代码!

别急,再测一下你的智商,下面的代码输出又是什么?

var exp = /abc/ while(exp.exec('abcabc')){ console.log(exp.lastIndex) }

不好意思,又死循环了
注意的地方:

  • 不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性

  • 如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0

你好直观

一直很难掌握replace中的$符,直到看了下面兄台的代码,瞬间领悟了。

var str = 'abcde'; var exp = /((b).(d))/; str.replace(exp , "--[not-match-before-match-$ ``]-[result-match-$ &]-[group1-$1,group2-$2,group3-$3]-[not-match-end-match-$ ']--")

因为markdown解析器的原因,$符后面跟着一个空格,正确的是下面的样子
"--[not-match-before-match-$`]-[result-match-$&]-[group1-$1,group2-$2,group3-$3]-[not-match-end-match-$']--"

问既然$有特殊意义,那如何表示$, $$

replace有惊喜

被人问到一事,replace中替换函数的参数问题:

function replaceFn (){ for (i in arguments) console.log("arguments " + i +" :value=" + arguments[i] ) return arguments[0] } var str='abcabcabc' var exp = /(c)(a)/g str.replace(exp , replaceFn )

replaceFn's result

ECMA3 规定,replace方法的参数 replacement 可以是函数,这时,每个匹配都调用该函数,函数返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有0个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

jQuery中是这么用的:

rmsPrefix = /^-ms-/ rdashAlpha = /-([\da-z])/gi function camelCase( string ) { return string.replace( rmsPrefix, "ms-" ) .replace( rdashAlpha, function( all, letter ) { return letter.toUpperCase(); }); }
这段代码可以把a-bc-def置换为aBcDef。

angular就更加凶残了,

var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; var MOZ_HACK_REGEXP = /^moz([A-Z])/; function camelCase(name) { return name. replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { return offset ? letter.toUpperCase() : letter; }). replace(MOZ_HACK_REGEXP, 'Moz$1'); }

angular可以把a:bc:def , a_bc_def , a-bc-def统统替换为aBcDef。

angular的开发者技高一筹的用到了替换函数的倒数第二个参数--匹配出现在原字符串中的位置

seajs中也有亮点,解析factory函数依赖时,replace函数的使用,瞬间高大上了不少。

function parseDependencies(code) { var ret = [] code.replace(SLASH_RE, "") .replace(REQUIRE_RE, function(m, m1, m2) { if (m2) ret.push(m2) }) return ret }

很过瘾

相关文章

  • js的字符串替换函数

    javascript吸引我的一个地方: 总能在别人的代码中看到另一个javascript。 好2 这不,好戏来了,...

  • PHP字符串处理函数

    字符串长度函数 字符串替换函数 截取字符串函数 分割、连接、反转函数 空白处理函数 字符转义函数 字符串比较函数

  • php中怎么替换字符串中的指定字符 --- 2021-12-16

    函数介绍: str_replace() 函数替换字符串中的一些字符(区分大小写)。该函数返回带有替换值的字符串或数...

  • js常用函数

    js替换字符串 js热更新对比版本号 深拷贝

  • Replace函数

    Replace() 字符替换函数 char : 等待替换的字符串search_string : 搜索需要替换的字符...

  • 2018-11-29字符串替换函数stringreplace

    字符串替换函数,需要引用SysUtils单元 rfReplaceAll:全部替换 rfIgnoreCase:忽略大...

  • 第116章 SQL函数 REPLACE

    第116章 SQL函数 REPLACE 字符串函数,用于替换字符串中的子字符串。 大纲 参数 string - 作...

  • 第134章 SQL函数 STUFF

    第134章 SQL函数 STUFF 字符串函数,用于替换字符串中的子字符串。 大纲 参数 string - 作为子...

  • Objective-C基础学习之字符串替换

    1.字符串的替换函数 -(NSString )stringByReplacingOccurrencesOfStri...

  • JS replaceAll

    JS 字符串替换操作有replace() 方法。但是这个方法有些问题,就是只能替换目标字符串中第一个匹配的字符串。...

网友评论

      本文标题:js的字符串替换函数

      本文链接:https://www.haomeiwen.com/subject/safptttx.html