JavaScript必备知识-- 正则表达

举报
阿童木 发表于 2021/08/22 14:52:40 2021/08/22
【摘要】 this指向谁调用指向谁,没有就是window使用new关键字实例化对象时,this指向新创建的对象函数预编译过程this指向window全局作用域里this指向windowcall/apply改变this指向obj.fun();fun()里的this指向obj**argument.callee**可以返回自己的引用,在哪个函数里面就指代哪个函数//callee用法var n = (fun...

this指向

谁调用指向谁,没有就是window

使用new关键字实例化对象时,this指向新创建的对象

  1. 函数预编译过程this指向window
  2. 全局作用域里this指向window
  3. call/apply改变this指向
  4. obj.fun();fun()里的this指向obj

**argument.callee**可以返回自己的引用,在哪个函数里面就指代哪个函数

//callee用法
var n = (function(num){
    if(num == 1){
        return 1;
    }else {
        return num * arguments.callee(num - 1);
        /*通过callee返回了函数本身,使得再次被调用*/
    }
}(3))
console.log(n);

克隆

浅克隆

浅克隆无法copy数组和对象

var obj = {
    name : "abs",
    age : '18',
    sex : 'male'
}
var obj1 = {}
function clone(Origin,target) {
    target = target || {};//防止用户不输入target
    for(var k in Origin){
        target[k] = Origin[k];
    }
}
clone(obj,obj1);

深克隆

先判断它是什么,原始值,数组还是对象,分别处理

  1. 遍历对象
  2. 是原始值直接copy
  3. 不是原始值判断是数组还是对象
  4. 是数组建空数组
  5. 是对象建空对象
  6. 建立了之后再遍历一遍原始对象或数组里是啥
  7. 递归
var obj = {
    name : 'lin',
    age : '18',
    sex : 'male',
    card : [1,2,3,4],
    wife : {
        name : 'bcsds',
        son : {
            name : 'aaa'
        },
        age : '23'
    }
}
var obj1 = {}
//原始值和对象数组typeof返回值有区别
function deepClone(origin,target) {
    target = target || {};
    for(var k in origin) {
        if(origin.hasOwnProperty(k)){
            if(typeof(origin[k]) == 'object') {
                if(Object.prototype.toString.call(origin[k]) == '[object Array]') {
                    target[k] = [];
                }else {
                    target[k] = {};
                }
                deepClone(origin[k],target[k]);
            }else {
                target[k] = origin[k];
            }
        }
    }
}
deepClone(obj,obj1);

正则表达式

通过RegExp对象来构造函数创建

通过字面量的方式创建

字母 说明
i 忽略大小写
g 全部匹配
m 换行匹配
var regexp = new RegExp(/123/);
var rg = /123/;

判断方法

test() 用于检测字符串是否符合该规则,会返回 true 或 false,如果含有符合正则表达式的返回true

边界符

边界符 说明
^ 匹配行首的文本(从头开始)
$ 匹配行尾的文本(以谁结束)

如果 ^和 $ 在一起,表示必须是精确匹配。

var reg1 = /^abc$/; // 精确匹配 要求必须是 abc字符串才符合规范
console.log(reg1.test('abc')); // true
console.log(reg1.test('abcd')); // false
console.log(reg1.test('aabcd')); // false
console.log(reg1.test('abcabc')); // false

方括号

括号里的字符都是可以选择的字符,只要有满足的就可

var rg = /[abc]/;
// 只要包含有a 或者 包含有b 或者包含有c 都返回为true
var rg1 = /^[abc]$/; 
//精确匹配 只有是a 或者是 b  或者是c 这三个字母才返回 true
var rg2 = /^[a-zA-Z0-9]$/; 
// 26个英文字母(大写和小写都可以)任何一个字母返回 true  。
var reg2 = /^[^a-zA-Z0-9]$/;
//方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 

量词符

量词符用来设定某个模式出现的次数。

量词 说明
* 重复0次或更多次
+ 重复1次或更多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

预定义类

预定类 说明
\d 匹配0-9的数字
\D 匹配0-9以外的字符
\w 匹配任意字母,数字,下划线
\W 除了上面的都有
\s 匹配空格,换行,制表等
\S 非空字符串

[\s\S]像这样两个大小写放在一起就是什么东西都可以

replace

实现字符串替换,可以是字符串或者正则表达式

var str = 'abscsA';
var newStr = str.replace(/a/gi,'哈哈')
//"哈哈bscs哈哈"

可以用这种方法来过滤敏感词汇

replace(/激情|gay/g,'**');
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。