JS题目总结(2)(正则...)

前言

天天都在快排啊,多叉树啊,数据结构,算法的阴影下瑟瑟发抖。。但是JS还是要总结的。。

正则的题目与正则小总结

(function(window){
    function fn(str){
          this.str = str;
     }
    fn.prototype.format = function(){
    var arg = arguments;
    return this.str.replace(/\{(\d+)}/g),function(a,b){
         return arg[b] || ''
    });
  }
window.fn = fn;
})(window);

(function(){
  var text = new fn('<p><a href={0}>{1}</a><span>{2}</span></p>');
console.log(text.format('http://www.baidu.com','johan','hello'))
})();

OK!填的空一个是arguments对象,另外一个当然是正则了~这个函数是把标签内的{数字}换成format传递的字符串的作用。首先在在执行函数内定义了一个对象fn,fn接收一个参数,并把它转换为自己的属性。然后使用原型为这个对象添加了一个方法~它能够替换掉传入的字符串内正则匹配为{一个及以上的数字}的部分,用传入的arguments对象替换。
最重要的地方就是replace函数了,replace函数接收的参数有两种类型,第一种:
左侧是字符串,右侧是$1,2,3…$&
左侧是我们需要替换的字符串,当然可以是正则,$1~n表示正则中分组中所匹配到的文字~从第一到最后,$&是正则匹配到的字符串。
当右侧是function(){}来表达需要替换的内容时,function(){}内的参数(a,b,c,d,e,f…)a,表示匹配到的字符串集合,b,c,e,f….表示分组的匹配到的内容,跟$是一样的~c表示第一次匹配到的序号,最后再多的就未定义了!
所以这道题就清楚啦!^ - ^!
正则表示的是{至少一个数字}/全局,那么a表示{0},{1},{2},b表示捕获组,就是分组匹配到的内容,由于这里只有一个小括号所以表示只有一个组,那么我们的b表示0,1,2,c是序号,就是11,15.28啦~
那么我们捕获组的内容刚好是0,1,2是序号,所以传入的字符串数组用序号返回,就能一一替换了,这里利用了捕获组刚好是序号完成了替换。
关于正则这里小小的总结一下:
首先正则的格式,/ /在这中间写内容,然后/ /g是全局查找,/ /i不区分大小写查找,gi就是和一起= =
好了,接下来是正则中的单元了
\d表示数字
\w表示字母或者数字
\s表示空格或者TAB换行符
. 表示任意的字符
+表示至少一个 \d+就是>=1个数字
{m,m}表示n~m个
星号(markdown里星号自动斜体= =所以。。)表示任意个
?表示尽可能少的匹配 .?表示尽可能少的匹配任意字符
然后出了正则的几个符号之外我们需要用\转译
[]表示范围
[0-9a-zA-Z_]表示匹配数字字母下划线
[0-9a-zA-Z_]+表示至少一个字母数字下划线
[a-zA-Z_$][0-9a-zA-Z_]星号表示由祖母下划线$开头,以任意的数字字母下划线$组成的字符串
a|b表示a或者b
^表示需要以其开头 ^\b以数字开头
$表示结束 \d$表示以数字结束
(不转译得话他俩就是这样用。)
最后小括号表示分组()分组的作用看了replace的分析,我们自然就知道啦~他方便我们来从正则中来提取出东西~

结语

关于正则可以考很多东西~之前看到的一道写模板文件的题目我现在也会写了= =虽然正则用的还不6,尖括号啊,还有?!等等也还没弄熟,但是算是入了个门把!