博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript-基础入门.0011.JavaScript正则类型
阅读量:6247 次
发布时间:2019-06-22

本文共 5685 字,大约阅读时间需要 18 分钟。

hot3.png

正则简介:

说明: RegExp属于引用类型,引用类型是一种,用于将数据和功能组织在一起,如var newRegExp = new RegExp(),这行代码创建了RegExp引用类型的一个新实例,保存在newRegExp中,使用的构造函数是RegExp,它只为新对象定义了默认的属性和方法.

 

创建正则:

模式修饰 修饰说明
i 忽略大小写
g 全局匹配
m 多行匹配

1

2

3

4

5

6

7

8

/*

 * 创建正则对象

 */

//        - 第一种方式: 使用new关键字创建,支持修饰模式指定

var regExp = new RegExp('pattern')

var regExp = new RegExp('pattern''igm')

//        - 第二种方式: 使用//符号创建,支持修饰模式指定

var regExp = /pattern/igm

 

正则:

说明: RegExp对象测试常用.test()和.exec(),两者都是用正则表达式去匹配字符串,但前者如果匹配到则返回true,否则返回false,后者如果匹配返回匹配字符串的相关信息数组,否则返回null

1

2

3

4

5

6

7

8

9

10

11

var strs = 'I Love You'

// 测试 - 使用new运算符的test方法

var pattern = new RegExp('love''i')

if(pattern.test(strs)) console.log('匹配')

// 测试 - 使用字面量方式test方法

var pattern = /love/i

if(pattern.test(strs)) console.log('匹配')

// 测试 - 一条语句实现正则表达式匹配

if(/love/i.test(strs)) console.log('匹配')

// 测试 - 使用exec测试返回匹配信息数组

if(/love/i.test(strs)) console.log(/love/i.exec(strs))

 

获取控制:

说明: 正则表达式元字符是包含特殊意义的字符,它们有一些特殊功能,可以控制匹配模式的方式,反斜杠后的元字符将失去其特殊含义

元字符/元符号 匹配情况
字符类:单个字符和数字
. 匹配除换行符外的任意字符
[a-z0-9] 匹配括号中的字符集中的任意字符
[^a-z0-9] 匹配任意不在括号中的字符集中的字符
\d 匹配数字
\D 匹配非数字,同[^0-9]相同
\w 匹配字母和数字及_
\W 匹配非字母和数字及_
字符类:空白字符
\0 匹配 null 字符
\b 匹配空格字符
\f 匹配进纸字符
\n 匹配换行符
\r 匹配回车字符
\t 匹配制表符
\s 匹配空白字,空格,制表符和换行符
\S 匹配非空白字符
字符类:锚字符
^ 行首匹配
$ 行尾匹配
\A 只有匹配字符串开始处
\b 匹配单词边界,词在[]内时无效
\B 匹配非单词边界
\G 匹配当前搜索的开始位置
\Z 匹配字符串结束处或行尾
\z 只匹配字符串结束处
字符类:重复字符
x? 匹配 0 个或 1 个 x
x* 匹配 0 个或任意多个 x
x+ 匹配至少一个 x
(xyz)+ 匹配至少一个(xyz)
x{m,n} 匹配最少 m 个、最多 n 个 x
字符类:替代字符
this|where|logo 匹配 this 或 where 或 logo 中任意一个
字符类:记录字符
(string) 用于反向引用的分组
\1 或$1 匹配第一个分组中的内容
\2 或$2 匹配第二个分组中的内容
\3 或$3 匹配第三个分组中的内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

/*

 * 使用点元字符

 */

var pattern = /g..gle/

var str = 'google'

console.log(pattern.exec(str))

/*

 * 使用重复匹配

 */

var pattern = /g.*gle/

var str = 'google'

console.log(pattern.exec(str))

 

/*

 * 使用字符类匹配

 */

var pattern = /g[a-zA-Z_]*gle/

var str = 'google'

console.log(pattern.exec(str))

 

var pattern = /g[^0-9]*gle/

var str = 'google'

console.log(pattern.exec(str))

 

var pattern = /[a-z][A-Z]+le/

var str = 'gOOGle'

console.log(pattern.exec(str))

 

/*

 * 使用元符号匹配

 */

var pattern = /g\w*gle\d*/

var str = 'google35'

console.log(pattern.exec(str))

 

var pattern = /\D{6,}/

var str = 'google35'

console.log(pattern.exec(str))

 

/*

 * 使用锚元字符匹配

 */

var pattern = /^google$/

var str = 'google'

console.log(pattern.exec(str))

  

var pattern = /^goo\sgle$/

var str = 'goo gle'

console.log(pattern.exec(str))

 

var pattern = /\bgoogle\b/

var str = 'use google happy'

console.log(pattern.exec(str))

 

/*

 * 使用或模式匹配

 */

var pattern = /baidu|google|soso/

var str = 'google'

console.log(pattern.exec(str))

 

/*

 * 使用分组模式匹配

 */

var pattern = /(google){3,}/

var str = 'googlegooglegooglegoogle'

console.log(pattern.exec(str))

 

var pattern = /8(.*)8/

var str = '8google8'

console.log(pattern.exec(str))

 

var pattern = /8(.*)8/

var str = '8google8'

console.log(str.replace(pattern, '<strong>$1</strong>'))

 

var pattern = /(.*)\s(.*)/

var str = 'baidu google'

console.log(str.replace(pattern, '$2 $1'))

贪婪模式 惰性模式
+ +?
? ??
* *?
{n} {n}?
{n,} {n,}?
{n,m} {n,m}?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

/*

 * 关于贪婪和惰性

 */

var pattern = /[a-z]+?/

var str = 'abcdefjhijklmnopqrstuvwxyz'

console.log(str.replace(pattern, 1))

 

var pattern = /8(.+?)8/g

var str = 'This is 8google8, That is 8google8, There is 8google8'

console.log(pattern.exec(str))

 

var pattern = /8[^8]*8/g

var str = 'This is 8google8, That is 8google8, There is 8google8'

console.log(pattern.exec(str))

 

/*

 * 捕捉性分组和非捕捉性分组

 */

var pattern = /(\d+)([a-z]+)/

var str = '123abc'

console.log(pattern.exec(str))

 

 

var pattern = /(\d+)(?:[a-z]+)/

var str = '123abc'

console.log(pattern.exec(str))

 

/*

 * 使用分组嵌套

 */

var pattern = /(A?(B?(C?)))/

var str = 'ABC'

console.log(pattern.exec(str))

 

/*

 * 使用前瞻捕捉

 */

var pattern = /(goo(?=gle))/

var str = 'google'

console.log(pattern.exec(str))

 

/*

 * 使用换行模式

 */

var pattern = /^\d(\.\w+)$/mg

var str = '1.baidu\n\n\n2.google\n\n\n3.soso'

console.log(str.replace(pattern, '#$1'))

 

其它相关:

说明: String字符串对象也提供了4个使用正则表达式的方法

对象方法 方法说明
.match(pattern) 返回pattern中的子串或null
.replace(pattern, replacement) 用replacement替换pattern
.search(pattern) 返回字符串中pattern开始位置
.split(pattern) 返回字符串按照指定pattern拆分的数组

1

2

3

4

5

6

7

8

9

// 字符串对象匹配方法 - match,获取匹配数组

var strs = 'I Love You, i love you'

console.log(strs.match(/love/ig))

// 字符串对象匹配方法 - search,找到就返回位置,所以g修饰符无用,未找到返回-1

console.log(strs.search(/love/ig))

// 字符串对象匹配方法 - replace,替换匹配的数据

console.log(strs.replace(/love/ig, '爱'))

// 字符串对象匹配方法 - split,用匹配的数据分割字符串为数组

console.log(strs.split(/love/ig))

 

常用正则:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

// 检查邮政编码

var pattern = /[1-9][0-9]{5}/

var str = '442700'

console.log(pattern.test(str))

 

// 检查文件压缩包

var pattern = /\w+\.(zip|rar|gz)/

var str = 'xmdevops-agent.zip'

console.log(pattern.test(str))

 

// 删除多余的空格

var pattern = /\s/g

var str = 'xx oo xx'

console.log(str.replace(pattern, ''))

 

// 删除首尾空格

var pattern = /^\s+/

var str = '  xx oo xx  '

console.log(str.replace(pattern, ''))

var pattern = /\s+$/

var str = '  xx oo xx  '

console.log(str.replace(pattern, ''))

var pattern = /^\s+(.+?)\s+/

var str = '  xxooxxoo  '

console.log(str.replace(pattern, '$1'))

 

// 电子邮件验证

var pattern = /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;

var str = 'yc60.com@gmail.com';

alert(pattern.test(str));

var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;

var str = 'yc60.com@gmail.com';

alert(pattern.test(str));

 

 

登录乐搏学院官网

或关注我们的官方微博,还有更多惊喜哦~

转载于:https://my.oschina.net/learnbo/blog/858155

你可能感兴趣的文章
Oracle11G DataGuard搭建记录
查看>>
python操作pymysql数据库
查看>>
POJ 3680 Intervals
查看>>
【总结整理】微信“不友好”设计其背后的逻辑---摘自人人都是产品经理
查看>>
51nod 1217 Minimum Modular
查看>>
.js 兼容 FireFox 和 IE 键盘事件
查看>>
java学习之部分笔记
查看>>
78. Subsets
查看>>
JavaScript高级之词法作用域和作用域链
查看>>
ServletConfig详解 (转载)
查看>>
oracle 查看用户所在的表空间
查看>>
CentOS配置sshd
查看>>
利用libevent的timer实现定时器interval
查看>>
接口的使用
查看>>
LeetCode 347. Top K Frequent Elements
查看>>
二叉树遍历
查看>>
JAVA 并发
查看>>
Markdown引用微博图床被防盗链不加载响应403完美解决
查看>>
0302思考并回答一些问题
查看>>
Sphinx的介绍和原理探索
查看>>