[JavaScript基础]学习②②--RegExp(正则表达式)

参考地址

http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499503920bb7b42ff6627420da2ceae4babf6c4f2000

\d 匹配一个数字

\w 匹配一个字母或数字

'00\d'可以匹配'007',但无法匹配'00A';

'\d\d\d'可以匹配'010';

'\w\w'可以匹配'js';

. 可以匹配任意字符

'js.'可以匹配'jsp'、'jss'、'js!'等等

* 任意个字符(包括0个)

+ 表示至少一个字符

? 表示0个或1个字符

{n} 表示n个字符

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

\s 匹配一个空格(也包括Tab等空白符)

\s+表示至少有一个空格,例如匹配' ','\t\t'等;

\d{3}\s+\d{3,8}
3个数字
至少有一个空格 例如' ','\t\t'
3-8个数字

进阶

[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线
[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串
[a-zA-Z_$][0-9a-zA-Z_$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名
[a-zA-Z_$][0-9a-zA-Z_$]{0, 19}更精确地限制了变量的长度是1-20个字符

A|B 匹配A或B

(J|j)ava(S|s)cript

^ 表示行的开头

^\d 表示必须以数字开头。

$ 表示行的结束

\d$ 表示必须以数字结束。

两种写法

var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');//符串的两个\\实际上是一个\

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

判断是否匹配

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

切分字符串

'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']

分组

提取字符串

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

识别合法时间

var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']

贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

var re = /^(\d+)(0*)$/;// \d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串
re.exec('102300'); // ['102300', '102300', '']

加?让\d+采用非贪婪匹配

var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']

全局搜索

g 表示全局匹配

多次执行exec()方法来搜索一个匹配的字符串

var r1 = /test/g;
// 等价于:
var r2 = new RegExp('test', 'g');
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;

// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10

re.exec(s); // ['VBScript']
re.lastIndex; // 20

re.exec(s); // ['JScript']
re.lastIndex; // 29

re.exec(s); // ['ECMAScript']
re.lastIndex; // 44

re.exec(s); // null,直到结束仍没有匹配到

全局搜索不能使用/^...$/

i 示忽略大小写

m 表示执行多行匹配

练习 验证Email地址的正则表达式

var re = /^\w+[\w.]*@\w+\.\w+$/;

验证并提取出带名字的Email地址

var re = /^<(\w+\s\w+)>\s(\w+[\w.]*@\w+\.[a-zA-Z]*)$/;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章转载地址: http://www.open-open.com/code/view/1430625516632 ...
    得起一个清新脱俗的名字阅读 6,535评论 1 3
  • 正则表达式 \n\n\n 【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、...
    黄花菜已凉阅读 4,685评论 0 4
  • Java的正则表达式讲解:(为了能看清,本文正则表达式用中文的句号代替英文句点) 英文句点符号:匹配单个任意字符。...
    红姑娘阅读 9,846评论 0 2
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 9,507评论 0 20
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 6,481评论 0 9