JavaScript及ES6|JavaScript高级---(8)正则表达式

一、概述 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。
正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
二、正则表达式的使用 1、创建
【JavaScript及ES6|JavaScript高级---(8)正则表达式】在 JavaScript 中,可以通过两种方式创建一个正则表达式。

  1. 利用RegExp对象来创建
var regexp = new RegExp(/123/); console.log(regexp);

  1. 利用字面量创建
var re = /123/; console.log(re);

2、测试正则表达式 test
test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串。
用法: regexObj.test(str)
  1. regexObj 是写的正则表达式
  2. str 我们要测试的文本
  3. 就是检测str文本是否符合我们写的正则表达式规范.
var re = /123/; console.log(re.test('123'));

三、正则表达式中的特殊字符 一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。
我们分几类简单介绍一下:
1、边界符
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

// 边界符 ^$ var re = /abc/; // 只要包含abc就为true console.log(re.test('abc')); console.log(re.test("abcd")); console.log(re.test("aabcd")); console.log("-------------"); var reg = /^abc/; // 以abc开头为true console.log(reg.test('abc')); console.log(reg.test("abcd")); console.log(reg.test("aabcd")); console.log("-------------"); var reg1 = /^abc$/; // 必须是abc console.log(reg1.test('abc')); console.log(reg1.test("abcd")); console.log(reg1.test("aabcd")); console.log("-------------");

  • 如果正则表达式形如/abc/,则表示只要测试内容包含abc即可为true。
  • 如果正则表达式形如/^abc/,则表示测试内容必须以abc开头才返回true。
  • 如果正则表达式形如/^abc$/,则表示测试内容必须为abc才返回true。
2、字符类
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。
(1) [] 方括号
只要包含[]里面的任意一个字符即可返回true。
// 字符类:[] 表示包含[]里面的任意一个字符即可 var rg = /[abc]/; console.log(rg.test('andy')); // true console.log(rg.test('color')); // true console.log(rg.test("red")); // false

(2)[-] 方括号内部 范围符-
例如[a-z]表示从a-z的所有字母
// [-]范围 var rg1 = /^[a-z]$/; console.log(rg1.test("a")); // true console.log(rg1.test("z")); // true console.log(rg1.test("A")); // false console.log(rg1.test("11")); //false

(3)[^] 方括号内部 取反符^
方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。
// []里面有^表示取反, 表示不能包含 var reg1 = /^[^a-zA-Z0-9_-]$/; console.log(reg1.test('a')); console.log(reg1.test('4')); console.log(reg1.test('+'));

注意和边界符 ^ 区别,边界符写到方括号外面。
3、量词符
正则表达式中也可以包含一些量词符来方便操作。
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

// 1. * 重复>=0次 var reg = /^a*$/; console.log(reg.test("")); console.log(reg.test("aaaaaaa")); console.log("-----------------------"); // 2. + 重复>=1次 var reg = /^a+$/; console.log(reg.test("")); console.log(reg.test("aaaaaaaa")); console.log("-----------------------"); // 3. ? 重复一次或者零次 var reg = /^a?$/; console.log(reg.test("dfghj")); console.log(reg.test("")); console.log(reg.test("a")); console.log(reg.test("aa")); console.log("-----------------------"); // 4. {n} 重复n次 var reg = /^a{3}$/; console.log(reg.test("")); console.log(reg.test("a")); console.log(reg.test("aaa")); console.log("-----------------------"); // 5. {n,} >=n次 var reg = /^a{3,}$/; console.log(reg.test("")); console.log(reg.test("aaaaaa")); console.log(reg.test("aaa")); console.log("-----------------------"); // 6. {m,n}>=m && <=n次 var reg = /^a{3,5}$/; console.log(reg.test("")); console.log(reg.test("aaaaa")); console.log(reg.test("aaaaaaaaaaa")); console.log("-----------------------");

括号总结
正则表达式中有这么多的括号,他们都表示什么意思呢?我们现在做一个总结:
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

// 中括号 字符集和,匹配括号中的字符 var reg = /^[]$/; // 大括号 量词符 重复次数 var reg = /^abc{3}$/; // abccc// 小括号 表示优先级 var reg = /^(abc){3}$/; console.log(reg.test("abcabcabc")); // true

4、预定义类
预定义类指的是某些常见模式的简写方式。
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

// \d匹配整数 var reg = /^\d$/; // \D匹配非数字 var reg = /^\D$/; // \w匹配任意的字母数字下划线 /a-zA-z0-9_/ var reg = /^\w$/; // \W除了字母数字下划线 var reg = /^\W$/; // \s 匹配是否为空 var reg = /^\s$/; // \S 非空

四、正则表达式的替换 在游戏中,你是否见到过左下角聊天框内容含有这样的字符,这是因为聊天内容含有敏感词汇而被和谐掉了,正则表达式也可以实现这样的操作。
其方法如下:
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

比如下面这个例子,我想要屏蔽掉激情**这个词
var strs = "今天真是美好的一天,同学们激情四射,激情的讨论"; var newStr = strs.replace(/激情/, "**"); console.log(newStr);

看看结果输出,激情确实被屏蔽了,但是第二个并没有被屏蔽,这是因为replace只能替换掉第一次出现的元素。
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

这时候怎么办呢?我们可以使用正则表达式的修饰符,其参数如下:
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

我们只需要在正则表达式后面加上一个g,就可以全局替换。
var strs = "今天真是美好的一天,同学们激情四射,激情的讨论"; var newStr = strs.replace(/激情/g, "**"); console.log(newStr);

看看输出结果:
JavaScript及ES6|JavaScript高级---(8)正则表达式
文章图片

ES6系列:
ES6—(1)新增语法及扩展方法

    推荐阅读