正则表达式

什么是正则表达式

正则表达式,是用于匹配字符串中字符组合的模式。在javaScript中,正则表达式也是对象。

正则表通常被用来检索、替换那些符合某个模式(规则)的文本。例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等。

 1 <script>
 2   // 1.利用RegExp对象来创建 正则表达式
 3   var regexp = new RegExp(/123/);
 4   console.log(regexp);  // /123/
 5 
 6   // 2.利用字面量创建 正则表达式
 7   var rg = /123/;
 8   // 3.test 方法用来检测字符串是否符合正则表达式要求的规范
 9   console.log(rg.test(123));   // true
10 </script>

边界符

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。

边界符 说明
^ 说明匹配行首的文本(以谁开始)
$ 说明匹配行尾的文本(以谁结束)

如果^和$在一起,表示必须是精确匹配。

1   // 3.test 方法用来检测字符串是否符合正则表达式要求的规范
2   console.log(rg.test('abc'));   // true
3   console.log(rg.test('abcd')); // true
4   console.log(rg.test('aabcd')); // true
5 
6   var reg = /^abc/;
7   console.log(reg.test('abc')); // true
8   console.log(reg.test('abcd')); // true
9   console.log(reg.test('aabcd')); // false

字符类

字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内

[^]方括号内部,取反符^

/^[^abc]$/.test('a');     // false
 1 <script>
 2   // 字符类: []表示有一系列字符可供选择,只要匹配其中一个就可以了
 3   var rg = /[abc]/;  // 只要包含有a或者b或者c,都返回true
 4   console.log(rg.test('andy'));  // true
 5   console.log(rg.test('baby'));  // true
 6   console.log(rg.test('color')); // true
 7   console.log(rg.test('red'));   // false
 8 
 9   var rg1 = /^[abc]$/;  // 三选一,只有是a或者b或者c,这三个字母才返回true
10   console.log(rg1.test('aa'));  // false
11   console.log(rg1.test('a'));  // true
12   console.log(rg1.test('b'));  // true
13   console.log(rg1.test('c'));  // true
14 
15   var rg2 = /^[a-z]$/;  // 26个英文字母任何一个字母返回true
16   console.log(rg2.test('a')); // true
17   console.log(rg2.test('z')); // true
18   console.log(rg2.test('A'));  // false
19 </script>

量词符

量词符用来设定某个模式出现的次数

量词 说明
* 重复零次或更多次
+ 重复一次或更多次
重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次
 1  // 量词符:用来设定某个模式出现的次数
 2   // 简单理解: 就是让下面的a这个字符重复多少次
 3   // var reg = /^a$/;
 4   // * 相当于 >= 0, 可以出现0次或者很多次
 5   // var reg = /^a*$/;
 6   // console.log(reg.test(''));  // true
 7   // console.log(reg.test('a')); // true
 8   // console.log(reg.test('aaa')); // true
 9 
10   // + 相当于 >= 1, 可以出现1次或者很多次
11   // var reg = /^a+$/;
12   // console.log(reg.test(''));  // false
13   // console.log(reg.test('a'));  // true
14   // console.log(reg.test('aaa'));  // true
15 
16   // ?相当于 1 || 0
17   // var reg = /^a?$/;
18   // console.log(reg.test(''));  // true
19   // console.log(reg.test('a'));  // true
20   // console.log(reg.test('aaa')); // false
21 
22   // {3} 就是重复3次
23   // var reg = /^a{3}$/;
24   // console.log(reg.test('')); // false
25   // console.log(reg.test('a')); // false
26   // console.log(reg.test('aaa')); // true
27 
28   // {3,} 大于等于3
29   // var reg = /^a{3,}$/;
30   // console.log(reg.test('')); // false
31   // console.log(reg.test('a')); // false
32   // console.log(reg.test('aaaa')); // true
33   // console.log(reg.test('aaa')); // true
34 
35   // {3, 16} 大于等于3,并且小于等于16
36   var reg = /^a{3,6}$/;
37   console.log(reg.test('')); // false
38   console.log(reg.test('aaaa')); // true
39   console.log(reg.test('aaaa')); // true
40   console.log(reg.test('aaaaaaaa')); // false

预定义类

预定义类指的是某种常见模式的简写方式。

预定类 说明
d 匹配0-9之间的任一数字,相当于【0-9】
D 匹配所有0-9以外的字符,相当于[^0-9]
w 匹配任意的字母、数字和下划线,相当于【A-Za-z0-9】
W 除所有字母、数字和下划线以外的字符,相当于【^A-Za-z0-9】
s 匹配空格(包含换行符、制表符、空格符等),相当于【 vf】
S 匹配非空格的字符,相当于【^ vf】

案例:验证座机号码

var reg = /^d{3}-d{8}|d{4}-d{7}$/;

replace替换

replace( )方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式。

  • g : 全局匹配
  • i  :忽略大小写
  • gi:全局匹配 + 忽略大小写
var str = 'andy和red';
var newStr = str.replace('andy', 'baby');
console.log(newStr)//baby和red

//等同于 此处的andy可以写在正则表达式内
var newStr2 = str.replace(/andy/, 'baby');
console.log(newStr2)//baby和red

//全部替换
var str = 'abcabc'
var nStr = str.replace(/a/,'哈哈')
console.log(nStr) //哈哈bcabc

//忽略大小写i
var str = 'aAbcAba';
var newStr = str.replace(/a/gi,'哈哈')//"哈哈哈哈bc哈哈b哈哈"

在线测试工具:https://tool.oschina.net/regex#

https://c.runoob.com/front-end/854

原文地址:https://www.cnblogs.com/guwufeiyang/p/13184934.html