JavaScript正则表达式

JavaScript 正则表达式简介

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

搜索模式可用于文本搜索和文本替换。

基本语法

用法一: /正则表达式主体/修饰符(可选)

var regexp = /is/i;

用法二: new RegExp(正则表达式主体,修饰符);

var regexp = new RegExp('is', 'g');

正则常用方法

search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

"Visit Runoob!".search("Runoob");  // 6

replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

'this is name'.replace(/\bis\b/g, 'IS');  // this IS name

test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

/http.*\.jpg/.test('http://dinghui.hsyc518.com/images/dinghui.jpg'); // true

exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

/\bis\b/g.exec('this is name');   // 'is'

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

'(8000,1)(8001,0)(8002,0)'.match(/(\d+,\d+)/g);   // ["8000,1", "8001,0", "8002,0"]

正则元字符

1、单词边界(\b)

 'this is name'.replace(/is\b/g, 'IS')

2、任意字符(.)

'this is name'.replace(/th.s/g, 'This')

3、任意数量(*)

'this is name'.replace(/t.*s/g, 'This')  // .* 匹配任意多个任意字符

4、转义字符(\)

var str = 'http://dinghui.hsyc518.com/images/dinghui.jpg'
/http.*\.jpg/.test(str)  // /.是将'.'进行了转义,使其识别为掉点符号

5、匹配数字(\d)

 'abcd68sd'.replace(/\d\d/, 'ID');

6、量词
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

/\d{4}/.test('abcd1234def'); //匹配连续4个数字
/b{2}/.test('abbcd1234def'); //匹配连续2个'b'
/\d{2,10}/;  //匹配连续出现2到10个数字

7、或([±])

'a+csda-asd+d'.replace(/a[+-]/g, 'ID');  匹配'a+'或者'a-'

8、开头(^)、结尾($)
^ 以什么开头,写在匹配字符的前面
$ 以什么结尾,写在匹配字符的后面

/^\d{4}[-,/]\d{2}[-,/]\d{2}$/.test('2016/02/12')

9、修饰符(g、i)
g: 全文搜索,如果不加g就查到第一个停止
i: 忽略大小写,默认大小写敏感
m: 多行搜索

('He is a boy. Is he').replace(/\bis\b/gi, 'IS')
(`@123
  @345
  @678`).replace(/^@\d/gm, 'X')  // 换行符也是字符,如果想匹配多行,可使用修饰符'm'

10、构造函数正则

var reg = new RegExp('\\bis\\b', 'g');
('He is a boy. Is he').replace(reg, 'IS')

11、元字符
原义文本字符: 表示本来意义的字符串字符
元字符:在正则表达式中有特殊含义的非字母字符
元字符: *+?$^.|(){}[]

文本元字符:  \t 水平制表符
            \v 垂直制表符
            \n 换行符
            \r 回车符
            \0 空字符
            \f 换页符
            \cX 与X对应的控制字符(Ctrl+X

12、字符类
一般情况下正则表达式一个字符对应字符串一个字符

// 正向字符类类:
'a1b2c3d4'.replace(/[abc]/g, 'X')  // 匹配a||b||c
// 字符类取反(^):
'a1b2c3d4'.replace(/[^abc]/g, 'X')  // 匹配不是a或b或c的字符

13、范围类

// [a-z] 匹配从a到z的任意字符 
'abcd123ADda'.replace(/[a-z]/g, '0')
// [a-zA-Z0-9] 组合范围类

14、预定义类

.   [^\r\n]         除了回车符和换行符之外的所有字符
\d  [0-9]           数字字符
\D  [^0-9]          非数字字符
\s  [\t\n\x0B\f\r]  空白符
\S  [^\t\n\x0B\f\r] 非空白符
\w  [a-zA-Z_0-9]    单词字符(字母、数字、下划线)
\W  [^a-zA-Z_0-9]   非单词字符
\b                  单词边界
\B                  非单词边界

15、贪婪模式、非贪婪模式

// 贪婪模式:尽可能多的匹配
'123456789'.replace(/\d{3,6}/, 'X')

// 非贪婪模式:尽可能少的匹配
'123456789'.replace(/\d{3,6}?/, 'X')

16、分组
使用()可以达到分组的功能,使量词作用于分组

(dinghui){3}    // 匹配'dinghui'字符串连续出现3次的

17、反向引用

'2015-12-21'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$3/$2/$1')    // "21/12/2015"
// 忽略分组:在括号里面加?:
'2015-12-21'.replace(/(?:\d{4})-(\d{2})-(\d{2})/g, '$3/$2/$1')

18、前瞻
正则表达式从文本头部向尾部开始解析,文本尾部方向称为“前”
前瞻就是正则比倒是匹配到规则的时候,向前检查是否符合断言

// 正向前瞻    exp(?=assert)
    /\w(?=\d)/  // 匹配\w的字符,且尾部为数字

// 负向前瞻    exp(?!assert)
    /\w(?!\d)/  // 匹配\w的字符,且尾部不为数字

// js不支持后顾
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值