正则表达式

65 阅读4分钟

正则表达式

  正则表达式(Regular Expression)是一个描述字符模式的对象, 用于对字符串进行匹配, 一般用在有规律的字符串匹配中; 如: 匹配用户名是否正确, 邮箱是否正确等。
  正则表达式常用于表单验证, 如在HTML表单中填写的用户名、地址、出生日期, 邮箱等信息, 在表单提交到服务器做进一步处理之前, 我们需要先检查表单中的信息是否符合要求, 做表单验证, 以确认用户确实输入了信息并且这些信息是符合要求的。

创建正则表达式

构造函数创建正则

new RegExp("匹配的内容","修饰符")

修饰符有:igm
i 忽略大小写
g 全局
m 换行

var str="this is a box"
var reg=new RegExp("is","igm")
console.log(reg.test(str));//true

字面量方式创建正则

var str="this is a box"
var reg=/is/igm;
console.log(reg.test(str));//true

正则的方法

  1. test():返回true则符合, false则不符合
  2. exec():返回数组则符合, null则不符合
var str="this is a box"
var reg=/box/i; 
console.log(typeof reg);//object
console.log(reg.test(str));//true
console.log(reg.exec(str));//['box', index: 10, input: 'this is a box', groups: undefined]

字符串支持正则的方法

  1. match() 条件满足返回数组,不满足返回null
  2. replace() 查找并替换, 返回替换后的新字符串
  3. search() 查找并返回匹配的字符串的起始位置,找不到匹配的则返回-1
  4. split() 根据指定字符串拆分, 返回拆分后的数组, 否则返回原字符串
var str = "This is a Box box BoX";
//1.
var matchArr = str.match(/box/gi);
console.log(matchArr); //(3) ['Box', 'box', 'BoX']
//2.
var replaceStr = str.replace(/box/gi, "xxx");
console.log(replaceStr);//This is a xxx xxx xxx
//3.
var searchIndex = str.search(/box/i);
console.log(searchIndex);//10
//4.
var splitArr = str.split(/b/i);
console.log(splitArr);//(4) ['This is a ', 'ox ', 'ox ', 'oX']

正则表达式的使用

1. .

.号元字符, 代表除了换行之外的所有单个字符,一个点.匹配一个任意的字符。

var reg = /g.gle/;
console.log(reg.test("gogle"));//true
console.log(reg.test("google"));//false

2. *

*号元字符, 配合其他字符使用, 允许其他字符出现任意多次。重复多次匹配, 可以出现任意次。

var reg = /g.*gle/;
console.log(reg.test("g78uhdf787er837&nhfd///gle"));//true

3. [ ]

[ ]表示字符可以出现的范围,一个中括号是一个字符。

//[a-z]表示匹配一个a-z的字母
var reg = /g[a-z]gle/;
console.log(reg.test("gagle"))//true
console.log(reg.test("gaagle"))//false
//[abc] a或者b或者c 
var reg = /g[abc]gle/;
console.log(reg.test("gcgle"));//true

4. ^

^非字符

//[^a-z]不是a-z
var reg = /g[^a-z]gle/;
console.log(reg.test("g1gle"));
console.log(reg.test("gagle"));

5. +

+表示至少出现1次

var reg = /g[a-z]+gle/
console.log(reg.test("goooogle"));//true
console.log(reg.test("ggle"));//false

6. \w

\w等价于[a-zA-Z0-9_]

// \w  [a-zA-Z0-9_]
// \w*
// \w+
// \w?
var reg = /g\w+gle/
console.log(reg.test("google"));//true

7. \W

\W取反,等价于[^a-zA-Z0-9_]

// \w  [a-zA-Z0-9_]
// \w*
// \w+
// \w?
var reg = /g\w+gle/
console.log(reg.test("google"));//true

8. \d

\d代表数字, 等价于 [0-9]

var reg = /g\dgle/
console.log(reg.test("g1gle"));//true

9. \D

\D匹配非数字, 相当于[^0-9]

var reg = /g\Dgle/
console.log(reg.test("g#gle"));//true

10. \s

\s匹配空格

var reg = /g\sgle/
console.log(reg.test("g gle"));//true

11. \S

\s匹配非空格

var reg = /g\Sgle/
console.log(reg.test("gcgle"));//true

12. {n}

{n}固定n次

var reg = /g\w{2}gle/
console.log(reg.test("gs1gle"));//true

13. {n,m}

{n,m}最少n次,最多m次

var reg = /g\w{2,5}gle/
console.log(reg.test("gs1defgle"));//true

14. {n,}

{n,}最少n次,最多不限

var reg = /g\w{2,}gle/
console.log(reg.test("gs1xcxcxcxxcxcxcdefgle"));//true

15. /^

/^匹配开始,从头开始匹配

var reg = /^google/
console.log(reg.test("googleycfyfty5656565"));//true
console.log(reg.test("123google"));//false

16. $/

/^匹配结尾,从结尾开始匹配

var reg = /google$/
console.log(reg.test("googleycfyfty5656565"));//false
console.log(reg.test("123google"));//true

17. ()

()分组模式匹配,加上小括号,将内容进行分组,可以作为一个整体进行多次匹配。

var reg = /^(google)+$/
console.log(reg.test("googlegoogle"));//true

18. |

|使用或模模式匹配,代表或者的意思,匹配其中一种字符。

var reg = /google|baidu|bing/  //三个字符中的其中一个匹配上就为true
console.log(reg.test("googl2e bai3du;bingl"));//true

18. $num

$num匹配第num个用圆括号括起来的子表达式的匹配结果

var reg = /^([a-z]+)\s([0-9]{4})$/i;
var str = "abc 1122"
console.log(reg.test(str));//true
console.log(RegExp.$1);//abc $1 匹配第一个用圆括号括起来的子表达式的匹配结果
console.log(RegExp.$2);//1122 $2 匹配第二个用圆括号括起来的子表达式的匹配结果

19. ?:

?:非捕获性分组

//捕获性分组
var reg = /(\d+)([a-z])/ //一个或多个数字,和一个a-z的字母
console.log(reg.exec("123abc"));//'123a', '123', 'a'

//非捕获性分组 ?: (添加?:后不会捕获第二个括号中的内容)
var reg = /(?:\d+)([a-z])/
console.log(reg.exec("123abc"));//'123a', 'a'
var reg = /(?:\d+)(?:[a-z])/
console.log(reg.exec("123abc"));//'123a'