a2
a
a21b21c2
===========================
b2
a21b21c2
===========================
c2
c
a21b21c2
===========================
ABC
很奇怪对不对,最后的<”>是方法的结果,很正确,得到了预期结果,让我们看看function的参数部分,
function被调用了3次,恰恰是匹配的次数,每次都置换匹配字符串。
每次调用的时候方法有四个参数
第一个参数很简单,是匹配字符串
第二个很诡异,不过每个都看一遍不难得出,第二个参数是正则表达式括号内的匹配的内容
第三个参数和容易想到,是匹配项在字符串中的index
第四个参数则是原字符串
很神奇对不对,但是不是就是这样了呢,我们再写一个试试
复制代码 代码如下:
var r = '1a21b21c2'.replace(/1\w2/g, function() {
for (var i = 0; i < arguments.length; i++) {
document.write(arguments[i] + '<br/>');
}
document.write('===========================<br/>')
return 'X';
});
document.write(r);
和前面例子很像,只是简单的把所有匹配项替换为了X,看看结果
复制代码 代码如下:
a2
a21b21c2
===========================
b2
a21b21c2
===========================
c2
a21b21c2
===========================
XXX
出乎意料对不对,结果是预期的,但是参数少了一个,第二项参数不见了,看看究竟还有什么不同——正则表达式中看似多余的括号不见了,上一个例子中,第二项参数恰恰是括号内的匹配项,是不是第二个参数就是正则表达式中括号内的匹配项呢,我们把括号加回来验证一下
复制代码 代码如下:
var r = '1a21b21c2'.replace(/1(\w2)/g, function() {
for (var i = 0; i < arguments.length; i++) {
document.write(arguments[i] + '<br/>');
}
document.write('===========================<br/>')
return 'X';
});
document.write(r);
看看结果
复制代码 代码如下:
a2
a2
a21b21c2
===========================
b2
b2
a21b21c2
===========================
c2
c2
a21b21c2
===========================
XXX
果不其然,这样我们就了解了function中到底有哪些参数,现在看看JavaScript语言精粹重的例子就应该明白了,当然我们需要知道关联数组,立即执行函数,闭包和arguments对象,如果让我们把一句话中所有的单词首字母大写,是不是会了呢
复制代码 代码如下:
//方法很多,这个只是验证我们刚才的理论才故意写成这样麻烦的做法
var sentence = 'i love you';
var upper = sentence.replace(/(\w)\w*\b/g, function(a,b) {
return b.toUpperCase()+a.substring(1);
});
document.write(upper);
复制代码 代码如下:
//这样写其实已经可以胜任
var sentence = 'i love you';
var upper = sentence.replace(/\w+\b/g, function(a) {
return a.substr(0,1).toUpperCase()+a.substring(1);
});
document.write(upper);
您可能感兴趣的文章: