It has been 1485 days since the last update, the content of the article may be outdated.

JS 正则

  • \d 可以匹配一个数字

  • \w 可以匹配一个字母或数字

  • \s 可以匹配一个空格

  • . 可以匹配任意字符

  • * 表示任意个字符(包括 0 个)

  • + 表示至少一个字符

  • ? 表示 0 个或 1 个字符

  • {n} 表示 n 个字符

  • {n,m} 表示 n-m 个字符

  • [] 表示范围

    • [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线
    • [0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如’a100’,’0_Z’,’js2015’等等;
    • [a-zA-Z\_\$][0-9a-zA-Z\_\$]* 可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;
    • [a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
  • A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配’JavaScript’、’Javascript’、’javaScript’或者’javascript’

RegExp

JavaScript有两种方式创建一个正则表达式:

  1. 直接通过/正则表达式/写出来
  2. 通过new RegExp('正则表达式')创建一个RegExp对象。
javascript
var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');

re1; // /ABC\-001/
re2; // /ABC\-001/

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

javascript
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

切分字符串

javascript
'a b   c'.split(' '); // ['a', 'b', '', '', 'c']  不彻底
'a b c'.split(/\s+/); // ['a', 'b', 'c']
'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']

分组

用()表示的就是要提取的分组(Group)。比如:

javascript
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
javascript
var re = /^[0-9a-zA-Z\.]+@[0-9a-zA-Z]+\.[0-9a-zA-Z]+$/;  //验证Email地址的正则表达式 'bill.gates@microsoft.com'


var re = /^<([\w\s]+)>\s(\w+\.?\w*@\w+\.\w{3})$/; //验证并提取出带名字的Email地址
var r = re.exec('<Tom Paris> tom@voyager.org');