理解JavaScript正则表达式攻略
什么是正则表达式
正则表达式是用来匹配字符串中符合某种规则的子串的表达式,常用于文本处理、数据提取、验证等场景。在JavaScript中,正则表达式可以通过RegExp对象来创建。
创建正则表达式
可以使用RegExp构造函数或正则表达式字面量语法来创建正则表达式。
使用RegExp构造函数
RegExp构造函数接收两个参数,第一个参数是要匹配的正则表达式字符串,第二个参数是可选的标志。
let reg = new RegExp("abc", "g");
使用正则表达式字面量
正则表达式字面量语法使用反斜杠(/)表示正则表达式的开始和结束。
let reg = /abc/g;
正则表达式的标志
创建正则表达式时可以指定标志,共包括6个可选的标志。下面是它们的含义:
g
全局匹配(匹配所有符合规则的子串,默认只匹配第一个)i
忽略大小写m
多行匹配(正则表达式字符串的边界可以出现在多行文本的开头或结尾)u
Unicode匹配模式,开启 Unicode 支持s
dotAll模式,使.
匹配任意字符,包括换行符y
粘连模式,相当于只匹配 lastIndex 指针指向的位置
可以在正则表达式的字面量或者RegExp构造函数的第二个参数位置设置标志。
let reg1 = /abc/gi;
let reg2 = new RegExp("abc", "gm");
元字符和元字符类
正则表达式中的元字符指具有特殊意义的字符,除了元字符外,其他字符都是字面量,表示匹配这个字符本身。下面是常见的元字符列表:
.
匹配任何除换行符(\n、\r、\u2028 或 \u2029)以外的单个字符。\w
匹配任何字母数字。\W
匹配任何非字母数字字符。\d
匹配任何数字。\D
匹配任何非数字字符。\s
匹配任何空白字符,包括空格、制表符、换行符等。\S
匹配任何非空白字符。^
匹配字符串的开头。$
匹配字符串的结尾。*
匹配前面的元素零次或多次。+
匹配前面的元素一次或多次。?
匹配前面的元素零次或一次。{n}
匹配前面的元素恰好出现n次。{n,}
匹配前面的元素至少出现n次。{n,m}
匹配前面的元素至少出现n次,最多出现m次。
集合
集合是匹配一个集合中的任意一个字符,常用于匹配多个字符中的一个。
[]
中括号内的任意字符都将匹配。
let reg = /[abc]/g // 匹配任何字符为a、b、c的字符串
[-]
中括号内的a-z
表示匹配字符a到z之间的所有字符。同样可以使用数字、大写字母等。
let reg = /[0-9]/g // 匹配任何数字字符
量词
量词用于限制元字符、字符集、分组、反向引用的匹配次数。
*
匹配前面的元素零次或多次。+
匹配前面的元素一次或多次。?
匹配前面的元素零次或一次。{n}
匹配前面的元素恰好出现 n 次。{n,}
匹配前面的元素至少出现 n 次。{n,m}
匹配前面的元素至少出现 n 次,最多出现 m 次。
let reg = /go{2,3}gle/i; // 匹配gogole或googole
分组和反向引用
使用分组可以将一些字符组成一个整体,并对这个整体进行操作,常用的操作有限定次数、分别应用量词和后向引用。后向引用是通过序号\n
引用前面的分组,实现匹配某个确定的分组。
let reg = /(go)+/i; // 匹配go或gogogo等
let reg1 = /(\d{4})-(\d{2})-(\d{2})/; // 匹配日期格式,如:2021-08-16
let str = "2014-01-28";
let arr = reg1.exec(str);
console.log(arr[0]); // 2014-01-28
console.log(arr[1]); // 2014
console.log(arr[2]); // 01
console.log(arr[3]); // 28
// 替换成 “$2/$3/$1”
let result = str.replace(reg1, "$2/$3/$1");
console.log(result); // 01/28/2014
示例
以下是使用正则表达式进行字符串匹配的一些示例:
验证邮箱格式是否正确
function isEmail(str) {
let reg = /^[a-z0-9]+([_\.-][a-z0-9]+)*@[a-z0-9]+(\.[a-z0-9]+)*\.[a-z]{2,5}$/i;
return reg.test(str);
}
console.log(isEmail("test@example.com")); // true
console.log(isEmail("test-123@example.com")); // true
console.log(isEmail("example.com")); // false
验证手机号格式是否正确
function isPhone(str) {
let reg = /^1[3456789]\d{9}$/;
return reg.test(str);
}
console.log(isPhone("17812345678")); // true
console.log(isPhone("21211111111")); // false
总结
以上就是对JavaScript正则表达式的详细讲解。学习正则表达式需要不断练习和尝试,才能更好地掌握相关知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:理解javascript正则表达式 - Python技术站