RegExp
1.什么是RegExp;
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本;
2.初始化RegExp;
var reg = new RegExp(string,pattern);
var reg = /string/pattren;
partren(模式) = > i:不区分大小写;g:全局模式,匹配到字符串结束;m:多行;
exec => 返回一个数组 如果字符串存在的话;
test => 测试string是否被正则匹配;返回 true : false;
match => 返回包含匹配字符串元素的一个数组;
3.语法;
\w 匹配包括下划线在内的任意单词字符类似于;类似于[a-zA-Z_];
\W 匹配非数字;类似于[^a-zA-Z_];
\d 匹配一个数字;类似于[0-9];
\D 匹配一个非数字字符;类似于[^0-9];
\b 匹配一个单词边界;
\B 匹配一个非单词边界;
\s 匹配任何空白字符;包括空格;制表符;换页符;
\S 匹配任何一个非空字符;
[] 表示一个范围;
() 隔离一段代码;
{n} n是一个非负整数。匹配确定的n次
{n,m} 匹配n到m次;如果没有m 表示至少匹配n次;
? 匹配0次或者1次;
?: 表示不捕获后面的内容
^ 在[]内部表示非;外部表示开头
$ 表示结尾;
. 匹配除了\n以外的任何字符;
+ 匹配一次或多次
* 匹配任意次;
| 关系或;两边作用范围: 遇到 ( 和 ) 结束; 没遇到时, 一直作用到正则表达式开头和结尾
\ 转义符;匹配正则表达式的语法或者保留字时需要使用;
(a)\1 1表示对前面的引用;支持先使用引用;但是匹配到的是位置;
(?= ) 后面满足;
(?!= ) 后面不满足;
4.查找数组中第k大的值;
function (arr, k){
return arr.sort(function(a, b){return a -b})[k];
}
5.判断变量的数据类型;
function type(obj){
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
6.实现each函数;
fucntion each(obj, callback){
if(type(obj) == 'object'){
for(var key in obj){
if(false === callback(obj[key], key, obj)){
return ;
}
}
}else{
for(var i = 0 ; i < obj.lengthl; i++){
if(false === callback(obj[i], i, obj)){
return ;
}
}
}
}
7._mixin;
function mixin(base){
var list = Array.prototype.slice.apply(arguments);
var method = typeof list[list - 1] === 'function'? list.pop(): function(key, base, obj){base[key] = obj[kye]};
for(var i = 1, l = list.length; i < l ; i++){
for(var key in list[i]){
method(key, base, list[i]);
}
}
return base;
}
8._bind;
function bind(method, context){
return function(){
return method.apply(context,arguments);
}
}
9.once();
function once(method){
var run = false,ret;
return function(){
if(!run){
run = true;
ret = method();
}
return ret;
}
}
10 _.throttle/_.debounce
function throttle(func, wait){
var last = 0;
return function(){
var date = +new Date();
if(date - last > wait){
last = date;
func();
}
}
}
function throttleEX(func, wait, config){
var last = 0, timeout , later = function(){
timeout = null;
last = +new Date();
func();
};
return function(){
var now = + new Date();
var remaining = wait - (now - last);
if(remaining < 0){
if(timeout){
clearTimeout( timeout );
timeout = null;
}
last = now ;
func():
}else if(!timeout && config.trailing){
timeout = setTimeout(later, remaining);
}
}
}