js中的正则

1. 东西

regexper.com

2. RegExp对象

js经由过程内置对象RegExp支撑正则,有两种要领可实例化RegExp对象。

// 字面量
var reg = /\bis\b/g;
// 组织函数
var reg = new RegExp('\\bis\\b','g');

g: global全文搜刮,默许只会找一个。
i: ignoreCase 疏忽大小写,默许大小写敏感。
m: multipe 多行。

3. 元字符

14个特殊标记;运用原义需转义。

* + ? $ ^ . | \ ( ) { } [ ]
序号标记申明
1*恣意(零,一,多)
2+一个或多个
3?零个或一个
4$表达式末端
5^方括号里示意取反;表达式最先
6.恣意字符
7|
8()分组
9{}量词
10[]类词
序号字符申明
1t程度制表符 tab
2v垂直制表符 vertical tab
3n换行符 line feed
4r回车符 return
50空字符 null
6f换页符 form feed
7cXctrl+X

4. 字符类

4.1 平常状况下正则表达式的字符和字符串的字符一一对应

ab\t

对应

abtab

4.2 给字符归类

[abc]指a,b,c之一

4.3 字符类取反

[^abc]指除了a,b,c以外的

4.4 局限类

[a-zA-Z0-9]

5. 预定义类和边境

序号字符等价类申明
1.1除了回车符和换行符以外的一切字符
2d[0-9]数字
3D2非数字
4s[tnrfv]space 空字符
5S3非空字符
6w[a-zA-Z0-9_]word 单词 数字大小写字母下划线
7W4非单词
序号字符寄义
1^以XXX最先
2$以XXX末端
3b单词边境
4B非单词边境

6. 量词

序号字符寄义
1*恣意(零,一,多)
2+一个或多个
3?零个或一个
4{m}m次
5{m,n}m-n次
6{m,}最少m次

7. 贪欲形式

str='12345678'.replace(/\d{3,6}/g,'$');

console.log(str);

效果:$78

默许贪欲形式,非贪欲形式是尽量少的婚配。做法是在量词背面加?

str='12345678'.replace(/\d{3,6}?/g,'$');

console.log(str);

效果:$$78

8. 分组

byron{3}婚配n三次不是byron三次。处理就是分组。

(byron){3}

和|合营运用

byr(on|en)lich{3}

反向援用捕捉组: $1 $2 …

str='2016-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');

效果:12/25/2016

疏忽分组,在分组内加?:

(?:Byron){3}

例子:

str='byronbyronbyron'.replace(/(byron){3}/,'@$1')
"@byron"
str='byronbyronbyron'.replace(/(?:byron){3}/,'@$1')
"@$1"

9. 前瞻(可加断言)

正则表达式从文本头部向尾部最先剖析,文本尾部方向,称为“前”。

前瞻就是在正则表达式婚配到划定规矩的时刻,向前搜检是不是相符断言,后顾/后瞻方向相反。

javaScript不支撑后顾。

相符和不相符特定断言称为 一定/正向 婚配和 否认/负向 婚配。

称号正则例子
正向前瞻exp(?=asset)/w(?=d)
负向前瞻exp(?!asset)w(?!d)
正向后顾exp(?<=asset)
负向后顾exp(?<!asset)

例子:

'a2*a3'.replace(/\w(?=\d)/g, '@')
"@2*@3"
'a2*a3'.replace(/\w(?!\d)/g, '@')
"a@*a@"

10. js对象属性

应用console.dir打印reg

var reg = /\w/;
console.dir(reg);
{
    flags: "",
    global: false, 
    ignoreCase: false,
    lastIndex: 0,
    multiline: false,
    source: "\w",
    sticky: false,
    unicode: false,
    __proto__: Object
}

11. RegExp的test和exec函数

11.1 test

text函数用于测试字符串参数中是不是存在婚配正则表达式形式的字符串;假如存在则返回true,不然返回false;

var reg=/\w/;
reg.test('a');true
reg.test('a');true

var reg=/\w/g;
reg.test('a');true
reg.test('a');false

涌现上面那种状况的原因是lastIndex属性;global为false时,该属性无效;global为true时,该属性会记录上一次婚配完后的位置,而且下一次查询会从该未知最先。

var reg=/\w/g;
console.log(reg.test('a'),reg.lastIndex); true 1
console.log(reg.test('a'),reg.lastIndex); false 0

所以,global为true或false对正则的婚配是两种行动。

11.2 exec

exec:运用正则表达式形式对字符串实行搜刮,并将更新全局RegExp对象的属性以反应婚配效果;假如没有婚配的文本则返回null,不然返回一个效果数组。

var reg=/\w\d/; 
reg.exec('a1b2c3d4e5f6ggg');
reg.exec('a1b2c3d4e5f6ggg');
两次都返回:["a1", index: 0, input: "a1b2c3d4e5f6ggg"]
数组第一个是婚配到的效果;global为false时,只会婚配一个。
数组第二个是婚配到的效果的位置,是个对象{index:0};
数组第三个是婚配的字符串

global为true时,两次返回的效果不一样。

var reg=/\w\d/g; 
reg.exec('a1b2c3d4e5f6ggg');
reg.exec('a1b2c3d4e5f6ggg');
返回:
["a1", index: 0, input: "a1b2c3d4e5f6ggg"]
["b2", index: 2, input: "a1b2c3d4e5f6ggg"]

有分组时:

var reg=/(\w)\d/g; 
reg.exec('a1b2c3d4e5f6ggg');
reg.exec('a1b2c3d4e5f6ggg');
["a1", "a", index: 0, input: "a1b2c3d4e5f6ggg"]
["b2", "b", index: 2, input: "a1b2c3d4e5f6ggg"]
多了分组的数据。

平常是轮回的写法:

var ts = 'a1b2c3d4e5f6ggg'
var reg=/(\w)\d/g; 
while(ret=reg.exec(ts)){
    console.log(ret.toString());
}

输出

a1,a
b2,b
c3,c
d4,d
e5,e
f6,f

12. 字符串的要领

12.1 str.search

string.search(str,replaceStr);
string.search(reg,replaceStr);

12.2 str.mathch

string.match(str,replaceStr);
string.match(reg,replaceStr);

12.3 str.replace

string.replace(str,replaceStr);
string.replace(reg,replaceStr);
string.replace(reg,function);

13. 例子

// 取扩展名
const str = "http://file.xxx.com/test/2017/09/19/34457aef4a9649e2af2f1d4e9c14d0d3.mp4";
const reg = new RegExp('^http:[/\\w.]*/(\\w*).mp4$');
const result = reg.exec(str);
console.log(result[1]);// 34457aef4a9649e2af2f1d4e9c14d0d3
// 替代source标签
const str = "aaa<source src='http://file.xxx.net/ueditor/jsp/upload/video/20170922/1506081788002070202.mp4' type='video/mp4'/>bbb";

const result = str.replace(/<source[\w\s=:'.\/0-9]+\/>/g,'');
console.log(result);// aaabbb

参考:慕课网js正则

  1. rn
  2. 0-9
  3. tnrfv
  4. a-zA-Z0-9_
    原文作者:长空
    原文地址: https://segmentfault.com/a/1190000008643192
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞