参考资料:http://www.cnblogs.com/whitewolf/archive/2013/03/14/2958720.html
看了破狼大大的这篇文章,感觉对replace也是有了新的认识。
主要是碰到这么一个编程问题,然后看到别人神奇的replace用法,就到处查了一下了解。
题目
获取 url 中的参数
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
见到的写法(自己稍微改了一点点。。
function getUrlParam(sUrl, sKey) {
var result = {};
sUrl.replace(/??(w+)=(w+)&?/g, function(a, k, v) {
// console.log(a, k, v, b, c, d);
if(result[k]){
result[k] = [].concat(result[k], v);
} else {
result[k] = v;
}
});
if(!sKey){
return result;
}else{
return result[sKey] || '';
}
}
下面copy参考文章中的一些总结:
第二个参数为字符串的时候:
对于正则replace约定了一个特殊标记符$
- $i (i:1-99) : 表示从左到右正则子表达式所匹配的文本。
- $& : 表示与正则表达式匹配的全文本。
- $` (`:切换技能键):表示匹配字符串的左边文本。
- $’ (‘:单引号):表示匹配字符串的右边文本。
- $$ :表示$转移。
第二个参数为函数:
在ECMAScript3推荐使用函数方式,实现于JavaScript1.2.当replace方法执行的时候每次都会调用该函数,返回值作为替换的新值。
函数参数的规定
- 第一个参数为每次匹配的全文本($&)。
- 中间参数为子表达式匹配字符串,个数不限.( $i (i:1-99))
- 倒数第二个参数为匹配文本字符串的匹配下标位置。
- 最后一个参数表示字符串本身。