位置方法:
indexOf() 从前往后 内部是使用全相等===的方法
lastIndexOf() 从后往前
都是接受两个参数,第一个是查找的项的值,第二个是从哪个开始
找到返回下标,找不到返回-1
比较简单,就不列举例子了。
某些迭代的方法,直接上例子:
var numbers = [1,2,3,4,5,4,3,2,1];
var ereryResult = numbers.every(function (item,index,array){
return item > 2;});
alert(false); //每一个都大于2,那么肯定是返回false了。注意every里面的函数参数必须三个,必须item,index,array
var someResult = numbers.some(function (item,index,array){
return item > 2)});
alert(true); //某一个大于2,确实是存在的,那么返回true。
var filterResult = numbers.filter(function (item,index,array){
return (item >2)});
alert(filterResult); //[3,4,5,4,3]
var mapResult = numbers.map(function (item,index,array){
return (item *2)});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
reduce()和reduceRight(),这两个方法都会迭代数组的所有项,然后构建一个最终返回的值
例子:
var values = [1,2,3,4,5];
var sumn = values.reduce(function(prev,cur,index,array){
return prev + cur;});
alert(sum); //15
Date类型
var now = new Date();
创建特定的日期
var someDate = new Date(Date.parse(“6/11/2020”);
或者
var someDate = new Date(Date.parse(“May 25,2020”);
或者
var allFives = new Date(2020,5,5,17,55,55);
2020年5月5号下午5点55分55秒
RegExp类型
var pattern1 = /at/g; //匹配字符串中所有"at"的实例,g表示全局模式
var pattern2 = /[bc]at/i //匹配第一个"bat"或"cat"的实例,i表示不区分大小写
var pattern3 = /.at/gi //匹配所有以"at"结尾的3个字符的组合,不区分大小写
var pattern2 = new RegExp("[bc]at","i); //跟第二个一样的意思
如果是使用构造函数的方法,原来的转义字符,要在它的前面多加一个
补:
1.
字面模式转为RegExp构造函数的时候,转义字符前面都需要加多一个
例如:
/[bc]at/ 等价于 “\[bc]at”
/.at/ 等价于 “\.at”
/name/age/ 等价于 “name\/age”
/\d.\d{1,2}/ 等价于 “\d.\d{1,2}”
^开始
$结束
*零次或多次
+一次或多次
?一次或者0次
{n}n次
{n,}至少n次
{n,m}至少n次,至多m次
. 匹配除了\n,\t之外任何单个字符
x|y 匹配x或者y
[abc] 匹配a或者b或者c
[^abc] 匹配除了a或者除了b或者除了c
[a-z] 匹配a到z
\b 匹配一个单词的边界 比如er\b 能匹配never中的er,但是不能匹配verb中的er
\B 匹配非边界的单词,比如er\B 能匹配verb中的er,但是不能匹配never中er
\d 匹配数字,与[0-9]一样
\D匹配非数字
在ECMAScript3中,正则表达式字面量始终会共享同一个RegExp实例,而使用构造函数创建的每个新的RegExp实例都是一个新的实例
例子:
var re = null;
for (var i = 0,i<10,i++){
re = /cat/g;
re.test("catsddsddfd");
}
for (var i = 0,i<10,i++){
re = new RegExp("cat","g");
re.test("catsddsddfd");
}
在第一个循环中,实际上只为/cat/创建一个RegExp实例,由于实例属性不会重置,第一次调用test,找到了cat字符串,返回true,第二次循环是从cat之后的s开始,即从索引3开始,找不到,到了尾部,那么第三次从尾部转移到头部重新检测
第二个循环使用RegExp构造函数,每次迭代都会创建一个新的实例,所以每次调用test函数都会返回true
但是到了ECMAScript5就明确规定了使用正则表达式字面量必须像直接调用RegExp构造函数一样,每次都会创建新的RegExp实例
举个例子详细说明RegExp实例的属性:
var pattern1 = /[bc]at/i;
alert(pattern1.global); //返回false,没有运用g标志
alert(pattern1.ignoreCase); //返回true,运用了i标志
alert(pattern1.mutiline); //返回false,没有运用m标志
alert*pattern1.source); //返回字面量形式的字符串形式:"[bc]at"
var pattern1 = new RegExp("\[bc\]at",“i”); //注意这里是两个\
alert(pattern1.global); //返回false,没有运用g标志
alert(pattern1.ignoreCase); //返回true,运用了i标志
alert(pattern1.mutiline); //返回false,没有运用m标志
alert*pattern1.source); //返回字面量形式的字符串形式:"[bc]at"
exec()函数如果没有查找到任何匹配,则返回null。
值得注意的是,每次执行exec()函数都只查找最多一个匹配并返回。
如果为正则表达式设置了全局标志(g),exec()函数仍然只返回最多一个匹配,不过我们再次调用该对象的exec()函数就可以查找并返回下一个匹配。
其原因是:如果regExpObject带有全局标志g,exec()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。该属性值默认为0,所以第一次仍然是从字符串的开头查找。当找到一个匹配时,exec()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。当再次执行exec()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
因此,当我们使用exec()函数执行了一次匹配之后,如果想要重新使用exec()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为0。如果exec()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
光看定义还是不太行,举个例子:
var test =“mom and dad and baby”;
var pattern = /mom(and dad (and baby)?)?/gi;
var matches = pattern.exec(test);
alert(matches.index); //0
alert(matches.input); //mom and dad and baby
alert(matches[0]); //mom and dad and baby
alert(matches[1]); //and dad and baby
alert(matches[2]); //and baby
这个设置g的意义在于:每次调用exec()则都会在字符串中继续查找新匹配项
再例如:
var text = “cat,bat,sat,fat”;
var pattern1 = /.at/gi;
var matches = pattern1.exec(text);
alert(matches[0]);
var matches = pattern1.exec(text);
alert(matches[0]);
var matches = pattern1.exec(text);
alert(matches[0]);
var matches = pattern1.exec(text);
alert(matches[0]);
每次匹配完一个matches的lastIndex都会完后移动,如果你没设置g标志,那么每次匹配完都会从下标为0开始匹配
最后说一个实用的:
例如:
var model = “aa000-00-0000”
var pattern = /\d{3}-\d{2}-\d{4}/gi
if (pattern.exec(model)){
alert("输入的形式正确!")
}else{
alert("输入的形式不正确!")
}
结果是:输入的形式正确,拿来判断用户的输入