什么是正则表达式
正则表达式,是用于匹配字符串中字符组合的模式。在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哈哈"