JS正则表达式

98 阅读4分钟

什么是正则表达式

什么是正则表达式

  • 正则表达式(regular expression)描述了字符串的“构成模式”,经常被用于检查字符串是否符合预定的格式要求

  • 正则表达式“按位”描述规则,是指它是一位一位的描述字符串的构成形式
    比如检查字符串是不是这样的:以字母m开头,然后是3个数字,最后以字母n结尾/^m\d\d\dn$/

// 定义正则表达式

// 6位数字的字符串
var regexp = /^\d{6}$/;

var str1 = '123456';
var str2 = '1234567';
var str3 = '12c4567';

console.log(regexp.text(str1));  // true
console.log(regexp.text(str2));  // false
console.log(regexp.text(str3));  // false

正则表达式的基本使用

1、正则表达式的创建

  • 使用/内容/的语法形式,可以快速创建正则表达式

  • 也可以使用new RegExp('内容')的形式,创建正则表达式

  • 使用typeof运算符检查正则表达式的类型,结果是object

2、元字符

  • “元字符”是指一位指定类型的字符
元字符功能
\d匹配一个数字
\D匹配一个非数字字符
\w匹配一个单字字符(字母、数字或者下划线)
\W匹配一个非单字字符
\s匹配一个空白字符,包括空格、制表符和换行符
.任意字符
  • 开头和结尾
元字符功能
^匹配开头
$匹配结尾
  • 如果使用new RegExp()写法,反斜杠需要多写一个进行转义
    比如/^\d$/new RegExp('^\\d$')是相同的意思

3、方括号表示法

  • 使用方括号,比如[xyz],可以创建一个字符集合,表示匹配方括号中的任意字符

  • 可以用短横-来制定一个字符范围,^表示否定

元字符等价的方括号表示法
\d[0-9]
\D[^0-9]
\w[A-Za-z0-0_]
\W[^A-Za-z0-0_]

4、量词

量词意义
*匹配前一个表达式0次或多次。等价于{0,}
+匹配前一个表达式1次或多次。等价于{1,}
?匹配前一个表达式0次或1次。等价于{0,1}
{n}n是一个正整数,匹配前面一个字符刚好出现了n
{n,}n是一个正整数,匹配前面一个字符至少出现了n
{n,m}n和m都是正整数,匹配前面的字符至少n次,最多m

()圆括号可以整体表示

5、修饰符

  • 修饰符也叫做标志(flags),用于使用正则表达式实现高级搜索
    var re = /m/gi;
    var re = new RegExp('m', 'gi');
修饰符意义
i不区分大小写搜索
g全局搜索

正则表达式和字符串

正则表达式的相关方法

  • 正则表达式可以“打点”调用的方法
方法简介
text()测试字符串是否匹配正则表达式,返回布尔值
exec()根据正则表达式,在字符串中进行查找,返回结果数组或者null
  • exec()方法的逐条遍历
var str = 'abc123def456ghi789';
var regexp = /\d+/;  // 注意没有开头和结尾,+表示贪婪的,尽可能多的寻找

// 使用循环语句循环执行exec,寻找所有的匹配结果,正则表达式必须加g,给执行语句加状态,不加值查询一次
var result;
while (result = regexp.exec(str)) {
    console.log(result);
}

字符串的相关方法

  • 字符串有哪些方法可以使用正则表达式
方法简介
search()在字符串中根据正则表达式进行查找匹配,返回首次匹配到的位置索引,测试不到则返回-1
match()在字符串中根据正则表达式进行查找匹配,返回一个数组,找不到返回null
replace()使用替换字符串替换掉匹配到的子字符串,可以使用正则表达式
split()分割字符串为数组,可以使用正则表达式
var str = 'abc123def4567';
var regexp = /\d+/g;

// search()方法,很像indexOf()
var result1 = str.search(regexp);
console.log(result1);  // 3 是出现的位置索引

// match()方法
var result2 = str.match(regexp); 
console.log(result2);  // ["123", "4567"]

// replace()方法
var result3 = str.replace(/[a-z]+/g, '*');  // 注意+表示贪婪的,尽可能多的连续匹配小写字母
console.log(result3);  // *123*4567

// split()方法
var result4 = str.split(/\d+/g);
console.log(result5);  // ["abc", "def"]

正则表达式的应用

正则表达式的应用

  • 用正则表达式进行表单验证是正则表达式最重要的实际应用