JavaScript必备知识-- 正则表达
【摘要】 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指向新创建的对象
- 函数预编译过程
this指向window
- 全局作用域里
this指向window
call/apply
改变this指向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);
深克隆
先判断它是什么,原始值,数组还是对象,分别处理
- 遍历对象
- 是原始值直接copy
- 不是原始值判断是数组还是对象
- 是数组建空数组
- 是对象建空对象
- 建立了之后再遍历一遍原始对象或数组里是啥
- 递归
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)