58正则、字符串和数组方法汇总

本文深入解析JavaScript中的正则表达式使用方法,包括test、exec与match等,同时详述了常见字符串和数组操作,如charAt、subString、push、pop及reduce等高级函数的应用技巧。
摘要由CSDN通过智能技术生成
一、正则方法:
1、test
```javascript:run
var replaceBefore='程序员:123';
var reg=/\d/;
var replaceAfter=reg.test(replaceBefore);
console.log(replaceAfter);
```
2、exec:(1)加g,情形如下
```javascript:run
var reg=/(\d)A(\d)/g;
var replaceBefore="000002223A45556A7888";
var replaceAfter;
replaceAfter=reg.exec(replaceBefore);
console.log("第1次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
/*以下第2次执行*/
replaceAfter=reg.exec(replaceBefore);
console.log("第2次执行时的返回值"+replaceAfter+"即:大正则第2次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
```
(2)不加g,情形如下
```javascript:run
var reg=/(\d)A(\d)/;
var replaceBefore="000002223A45556A7888";
var replaceAfter;
replaceAfter=reg.exec(replaceBefore);
console.log("第1次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
/*以下第2次执行*/
replaceAfter=reg.exec(replaceBefore);
console.log("第2次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
```
附:正则匹配实例
```javascript:run
var str="<img src=' ' alt='your钱money成'/>";
var first=str.match(/alt='(.+)'/);
var second=/alt='(.+)'/.exec(str);
console.log(first[1]);
console.log(second[1]);
/* \w:只匹配数字、字母、下划线
\W:匹配所有不被\w匹配的字符
.:匹配换行符之外的所有字符 */
```
二、字符串方法:
1、charAt:通过索引获取字符,不存在时,返回空字符串
2、subString:截取字符串(1)没有参数时,返回整个字符串(2)一个参数时,返回返回参数到末尾的字符串(3)两个参数时(m,n),返回索引m到索引n,不包括n;原字符串不变
3、subStr:截取字符串(1)没有参数时,返回整个字符串(2)一个参数时,返回返回参数到末尾的字符串(3)两个参数时(m,n),返回从索引m开始的n个字符;原字符串不变
4、slice:复制字符串(1)没有参数时或参数是0时,返回整个字符串(2)一个参数时,返回返回参数到末尾的字符串(3)两个参数时(m,n),返回从索引m到索引n,不包括n
5、indexof:返回字符在字符串中首次出现的位置索引,没出现返回-1
6、split:把字符串按照指定的分隔符拆分成数组
7、match:(1)加g,情形如下
```javascript:run
var reg=/(\d)A(\d)/g;
var replaceBefore="000002223A45556A7888";
var replaceAfter;
replaceAfter=replaceBefore.match(reg);
console.log("第1次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,大正则第2次匹配到的内容");
/*以下第2次执行*/
replaceAfter=replaceBefore.match(reg);
console.log("第2次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,大正则第2次匹配到的内容");
```
(2)不加g,情形如下
```javascript:run
var reg=/(\d)A(\d)/;
var replaceBefore="000002223A45556A7888";
var replaceAfter;
replaceAfter=replaceBefore.match(reg);
console.log("第1次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
/*以下第2次执行*/
replaceAfter=replaceBefore.match(reg);
console.log("第2次执行时的返回值"+replaceAfter+"即:大正则第1次匹配到的内容,第1个小正则匹配到的内容,第2个小正则匹配到的内容");
```
8、replace:
两个字符串做参数时,旧字符串(第一个参数)被新字符串(第二个参数)取代;
```javascript:run
var replaceBefore='AAACCCAAAA';
var replaceAfter=replaceBefore.replace("AA","E");
console.log(replaceAfter);
```
正则和回调函数作参数时,
(1)加g,情形如下
```javascript:run
var reg=/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/g;
var replaceBefore='AAA12345678BBB87654321234CCC';
var i=0;
var replaceAfter=replaceBefore.replace(reg,function(totalRegexp,A1,A2,A3,A4,A5,A6,A7,A8,firstIndex,totalString){
i=i+1;
console.log('"'+totalRegexp+'"是被大正则第'+i+'次匹配到的内容');
console.log('"'+A1+'"是被第1个小正则匹配上的内容');
console.log('"'+A2+'"是被第2个小正则匹配上的内容');
console.log('"'+A3+'"是被第3个小正则匹配上的内容');
console.log('"'+A4+'"是被第4个小正则匹配上的内容');
console.log('"'+A5+'"是被第5个小正则匹配上的内容');
console.log('"'+A6+'"是被第6个小正则匹配上的内容');
console.log('"'+A7+'"是被第7个小正则匹配上的内容');
console.log('"'+A8+'"是被第8个小正则匹配上的内容,以此类推');
console.log('"'+firstIndex+'"是被大正则匹配到的内容的第1个字符在整个字符串中的索引');
console.log('"'+totalString+'"是整个字符串,本轮匹配结束');
console.log("");
return '我们替换被大正则第'+i+'次匹配到的内容'
});
console.log(replaceAfter);
```
(2)不加g,情形如下
```javascript:run
var reg=/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/;
var replaceBefore='AAA12345678BBB87654321234CCC';
var i=0;
var replaceAfter=replaceBefore.replace(reg,function(totalRegexp,A1,A2,A3,A4,A5,A6,A7,A8,firstIndex,totalString){
i=i+1;
console.log('"'+totalRegexp+'"是被大正则第'+i+'次匹配到的内容');
console.log('"'+A1+'"是被第1个小正则匹配上的内容');
console.log('"'+A2+'"是被第2个小正则匹配上的内容');
console.log('"'+A3+'"是被第3个小正则匹配上的内容');
console.log('"'+A4+'"是被第4个小正则匹配上的内容');
console.log('"'+A5+'"是被第5个小正则匹配上的内容');
console.log('"'+A6+'"是被第6个小正则匹配上的内容');
console.log('"'+A7+'"是被第7个小正则匹配上的内容');
console.log('"'+A8+'"是被第8个小正则匹配上的内容,以此类推');
console.log('"'+firstIndex+'"是被大正则匹配到的内容的第1个字符在整个字符串中的索引');
console.log('"'+totalString+'"是整个字符串,本轮匹配结束');
console.log("");
return '我们替换被大正则第'+i+'次匹配到的内容'
});
console.log(replaceAfter);
```
三、数组的方法:
1、push
(1)作用:向数组末尾追加一项
(2)参数:要添加的数组项(多项用逗号隔开)
(3)返回值:新数组的长度
(4)是否改变原数组:改变
2、pop
(1)作用:删除项数组末尾项
(2)参数:没有参数
(3)返回值:被删除的项
(4)是否改变原数组:改变
3、unshift
(1)作用:向数组开头添加一项
(2)参数:要添加的数组项(多项用逗号隔开)
(3)返回值:新数组的长度
(4)是否改变原数组:改变
4、shift
(1)作用:删除数组开头项
(2)参数:没有参数
(3)返回值:被删除的项
(4)是否改变原数组:改变
5、splice
(1)作用:参数不同,作用不同,主要用来删除数组项
(2)(3)参数与返回值:
A、没有参数:原数组不变,返回空数组
B、一个参数:从索引位置删除到末尾,返回被删除项构成的数组
C、两个参数(n,m):从索引n删除m个,返回被删除项构成的数组
D、三个参数(n,m,X): 从索引n删除m个,被删除项用X填补,返回被删除项构成的数组,
(4) 是否改变原数组:改变
6、slice
(1)作用:复制数组项
(2)(3)参数与返回值:
A、没有参数:原数组不变,返回整个数组
B、一个参数:返回从索引位置到末尾,
C、两个参数(n,m):返回索引n到m,不包含m
(4)是否改变原数组:没有改变
7、concat
(1)作用:把多个数组拼接在一起
(2)参数:要拼接的数组或字符串。如果是数组,就把数组里的每一项放到原数组的后面;如果是字符串,把字符串作为一项,放在原数组后面;克隆数组:ary.concat();ary.concat([]);
(3)返回值:拼接好的数组
(4)是否改变原数组:没有改变
8、join
(1)作用:把数组的每一项按照指定的分隔符拼接成字符串
(2)参数:指定的分隔符,如果是空引号“”,就把每一项不加分割地放在一起
(3)返回值:拼接好的字符串
(4)是否改变原数组:没有改变
另外:eval(),把字符串的引号去掉,并当作js代码运行,比如eval(“alert(1)”)
9、reverse
(1)作用:倒序数组
(2)参数:不需要参数
(3)返回值:倒序后的数组
(4)是否改变原数组:改变
10、sort
(1)作用:按照指定规则排序
(2)参数:A、一个参数,只能给一位数排序;B、回调函数为参数,如ary.sort(function(a,b){return a-b})为升序
(3)返回值:排好序的数组
(4)是否改变原数组:改变
11、indexOf
(1)作用:获取数组项第一次在数组中出现的位置索引
(2)参数:要判断的数组项
(3)返回值:数组项的索引,没有该项返回-1
(4)是否改变原数组:不变
12、forEach
(1)作用:循环遍历每一项,循环次数为数组相数
(2)参数:匿名函数,匿名函数可以有三个参数
(3)返回值:undefined
(4)是否改变原数组:不变
13、map
(1)作用:循环遍历每一项,循环次数为数组相数
(2)参数:匿名函数,匿名函数可以有三个参数
(3)返回值:返回一个新数组,新数组的每一项是匿名函数每次执行后的返回值
(4)是否改变原数组:不变
14、find
(1)作用:找出最先满足条件的那一项
(2)参数:匿名函数,匿名函数可以有三个参数
(3)返回值:最先满足条件的那一项
(4)是否改变原数组:不变
15、filter
(1)作用:找出所有满足条件的项
(2)参数:匿名函数,匿名函数可以有三个参数
(3)返回值:所有满足条件的项组成的数组
(4)是否改变原数组:不变
16、every:方法用于检测数组的所有元素是否都满足指定条件,返回值为boolean。
17、some:方法用于检测数组中是否有元素满足指定条件,返回值为boolean。
附:ES6数组方法实例
1、reduce:累加。接受四个参数:初始值(或回调函数上1次的返回值),当前元素值,当前索引,调用 reduce 的数组。
(1)
```javascript:run
var ary=[1,3,2,4,3,2];
var aryTotal=ary.reduce(function (total,num) {
return total+num;
});
console.log(aryTotal);
```
(2)
```javascript:run
var todos = [{
score: 12,
completed: true
}, {
score: 21,
completed: false
}, {
score: 35,
completed: true
}, {
score: 47,
completed: true
}, {
score: 95,
completed: false
}];
const totalScore = todos.reduce(function(total, item){
return item.completed ? total + item.score : total
},10000);
console.log(totalScore);
```
```html:run
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>redux下compose</title>
</head>
<body>
</body>
</html>
<script>
function compose() {
for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
return funcs.reduce(function (a, b) {
return function () {/*2、此处没接收值,为空*/
return a(b.apply(undefined, arguments));
};
});
}
compose(function (a) {
console.log(a)
},function (c) {
console.log(arguments);
var b=5;
return b+c
})(11)/*1、此处没传值,为空*/;
</script>
```
```javascript:run
var arrayFunction = [functionA, functionB, functionC, functionD];
function compose(arrayFunction) {
return arrayFunction.reduce(function (a, b) {
return function () {
return a(b.apply(undefined, arguments));
};
})
}
compose(arrayFunction)(functionE);
//第一次循环后的结果为
function functionOne() {
return functionA(functionB.apply(undefined, arguments));
}
//第二次循环后的结果为
function functionTwo() {
return functionOne(functionC.apply(undefined, arguments));
}
//第三次循环后的结果为
function functionThree() {
return functionTwo(functionD.apply(undefined, arguments));
}
//给第三次循环后的结果传参并执行,最终返回结果为
functionTwo(functionD.apply(undefined, functionE));
```

2、filter:过滤
(1)
```javascript:run
var aryOld = [1, 2, 3, 4, 5];
var aryNew=aryOld.filter(function(item){
return item > 3;
});
console.log(aryNew);
```
(2)
```javascript:run
var todos = [{
score: 10,
completed: true
}, {
score: 2,
completed: false
}, {
score: 30,
completed: true
}, {
score: 40,
completed: true
}, {
score: 5,
compelted: false
}];
var trueScore = todos.filter(function(item){
return item.completed;
});
console.log(trueScore);
```
3、find:查找
(1)
```javascript:run
var ary=[1, 5, 10, 15]
ary.find(function(value) {
return value > 9;
}) // 10
```
(2)
```javascript:run
var studentAll = [
{
name: '张三',
gender: '男',
age: 20
},
{
name: '王小毛',
gender: '男',
age: 20
},
{
name: '李四',
gender: '男',
age: 20
}
];
var studentOne=studentAll.find(function (ele) {
return ele.age == 20
});
console.log(studentOne);
```

转载于:https://www.cnblogs.com/gushixianqiancheng/p/10966978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值