javascript基础快速入门视频教程
https://edu.csdn.net/course/detail/32172
正则表达式的使用,exec和match的却别
var reg = /javascript/i;
var str = '前端语言JavaScript很简单。'
//使用字符串自带的方法
console.log(str.search('javascript'));
//在search方法中参数为字符串,输出为-1,因为有大小写所以没有找到
console.log(str.search(reg));
//在search方法中参数为正则表达,输出为4,通过正则表达式进行查询,可以找到
console.log(str.match('javascript'));
//在match方法中参数为字符串,输出为null,因为有大小写所以没有找到
console.log(str.match(reg));
//在match方法中参数为正则表达,返回值为匹配上的字符串的数组,不但返回结果数组,还给数组增加了两个属性
//index属性,标识检索到的字符串的位置,input标识输入的字符串
/*
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,
其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,
而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,
返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,
input 属性声明的是对 stringObject 的引用。
*/
var reg2 = /javascript/gi;
var str2 = '前端语言JavaScript很简单。javascript'
console.log(str.match(reg2));
/*
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。
若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。
不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,
而且也没有 index 属性或 input 属性。
*/
console.log(str.replace('javascript', 'js'));
//在replace方法中参数为字符串,没有替换成功,因为有大小写,所以找不到对应的字符,所以没有替换
console.log(str.replace(reg, 'js'));
//在replace方法中参数为正则表达式,替换成功,通过正则表达式进行查询,可以找到,可以成功替换
//使用正则表达式的对象方法
console.log(reg.test(str));
//检查str中是否有reg代表的字符串,有返回true,没有放回false,是正则表达式最常用的方法
console.log(reg.exec(str));
//检索str中的reg代表的字符串,返回字符串数组
console.log(reg.exec(str)[0]);
//获取检索到的第一个字符串
console.log(reg.exec(str).index);
//exec的返回值,不但返回结果数组,还给数组增加了两个属性
//index属性,标识检索到的字符串的位置,input标识输入的字符串
console.log(reg.exec(str).input);
//如果正在表达式是一个全局正则表达式的时候,例如reg2,也就是表达式有参数g的时候
console.log(reg2.exec(str2));
console.log(reg2.exec(str2));
/*但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。
它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。
当 exec() 找到了与表达式相匹配的文本时,在匹配后,
它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。
这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。
当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
*/
//循环输出所有字符
reg2.lastIndex = 0;
while ((result = reg2.exec(str2)) != null) {
console.log(result);
console.log(reg2.lastIndex);
}
//验证用户名是否为字母、数组、下划线8位到20位长度
var reg3 = /^\w{8,20}$/;
var userName = document.getElementsByName("userName")[0];
userName.onblur = function () {
var userNameError = document.getElementsByName("userNameError")[0]
if (reg3.test(userName.value)) {
userNameError.innerHTML = "";
}
else {
userNameError.innerHTML = "验证用户名为字母、数组、下划线组成的8位到20位字符";
}
}