<
JS中的正则表达式
>
上一篇

python3基础笔记(一)
下一篇

github远程库

JS中的正则表达式

前言

在涉及对一个字符串进行格式验证,比如验证它是否是有效的邮箱格式,虽然可以分离提取字符串@前后的字符来判断,但是那样显然很麻烦,所以我们可以使用正则表达式来对字符串进行匹配,在js中通过RegExp类型来支持正则表达式

常见的应用如下:

  1. 验证字符串
  2. 查找字符串
  3. 替换字符串
  4. 提取字符串

格式

正则表达式的格式很简单,如下:

/abc/i;

这段正则表达式可以匹配包含'abc'或者ABC的字符串等,/.../包裹的内容是正则表达式,/.../后面的是标志,每一个正则表达式都可以带有1个或者多个标志,标志i模式下不区分大小写

元字符

正则表达式中的元字符可以匹配位置或字符串中的某个字符,通过搭配可以更高效的写出正则表达式

RegExp

创建正则表达式
//通过字面量创建正则表达式
var re1 = /ABC\-001/;
//通过RegExp对象实例化一个正则表达式
var re2 = new RegExp('ABC\\-001');

RegExp实例化的表达式参数是字符串,需要转义一下

这两种创建方式的结果并没有区别,写法是一样的

测试字符串是否符合条件
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

RegExp对象的test()方法用于测试给定的字符串是否符合条件

切分字符串
'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']

通过正则表达式还可以比固定字符串更灵活的分割字符串

规则中包含空格、,;的任意一个通过匹配开启一次分割,在+的贪婪匹配下还可以过滤掉重复的分割符号(#^.^#)

分组

()包含的正则表达式,在使用exec()ss匹配的时候会返回一个数组:

var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null

exec()在匹配成功时,返回的Array中,第一个元素是匹配到的整个字符串,后面的元素依次为分组中匹配的字符串

exec()在匹配失败时,会返回null

替换字符串
'0123.123456100'.replace(/^[0]*([1-9]\d*\.\d{0,4})\d*\.*$/,'$1')

([1-9]\d*\.\d{0,4})匹配的是正整数开头,且有效小数位数为4位的数值,也是我们需要的效果,在通过/^[0]*\d*\.*$/保证整个字符串都会匹配有效,最后替换字符串中的$1表示第一个分组(括号)中的内容

标志

总结

  1. [{(\$|)?*+.}],元字符必须转义,不然不会被识别
  2. 惰性限定符对于*?来说就是匹配0次,对于{n,m}?来说等于{n}
Top
Foot