(转)js replace() 文本替换

目前在看《Secrets of the JavaScript Ninja.pdf》p166,listing7.9 代码不解,网得一博文解之,故转之。不解代码如下

 

<script type="text/javascript">
assert( "border-bottom-width".replace(
/-(\w)/g, 
function(all,letter) {
return letter.toUpperCase();
}) == "borderBottomWidth",
"Camel cased a hyphenated string.");
</script>

 

转文:

代码如下:

//把word-word转化为wordWord 
function camelize(s){ 
return s.replace(/-(\w)/g, function(strMatch, p1){ 
return p1.toUpperCas(); 
}); 
} 

 

这里应用到了文本替换函数replace,他的一般语法估计大家都已经耳熟能详了,现在介绍一下当他的第二个参数为函数时的情形。

今天我在群里发这个函数的时候,有个人反映很快,说上面的那个正则写错了“/-(\w)/g”,而后很快又明白了,他的疑惑是这个“()”,其实这个括号是很必要的:

(x)匹配x (就是子表达式),将x保存在名为$1,$2...$9的变量中,其实就是给其加一个索引,方便后面的调用。如果不加这个括号就会出错了:

 

 

好的,下面介绍一下函数参数的意义,为什么这个函数能够实现指定的功能呢?

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

看起来好像有点烦,举个例子:


复制代码 代码如下:
camelize(www-rrr);

 

也就是调用一下,其实上面的strMatch值为-r,就是与正则匹配的字符串(该函数的第一个参数是匹配模式的字符串),

上面的p1的值是r,指的是紧接着-后面的r(接下来的参数是与模式中的子表达式匹配的字符串),就是我们规定的索引——" (\w) "。

好了,我想之后这个函数要执行什么应该能看的很清楚了,呵呵,就到这里了,欢迎补充提议

 

详细出处参考:http://www.jb51.net/article/22614.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值