正则表达式

195 阅读2分钟

创建:

1.构造函数:var reg = new RegExp(较繁琐,现用下面的)

2.字面量: var reg = / /g(创建对象的方式)

g:global,全文搜索,不添加的话搜索到第一个结果就停止搜索

i:忽略大小写

m:多行搜索

元字符:([{|$|)?*+

预定义类:

. 除回车符和换行符之外的任意字符
\d 数字字符
\D 非数字字符
\s 空白符
\S 非空白符
\w 单词字符,字母,数字下划线
\W 非单词字符

举几个例子:

var reg = /[a-z]/ig []这个大括号就是区间a到z之间
var reg = /[abcde]/ig 单独匹配abcde这几个
var reg = /[^abcd]/ig 只要不是abcd中的任何一个则被选上
\n 是换行符
^ 以……开头
$ 以……结尾
\b 单词边界
\B 非单词边界

举例

function isPhoneNum(str){
  return /^1[34578]\d{9}$/g.test(str)
}
console.log(isPhoneNum(1373934894521))
这里就是以1开头,$就是以什么结尾。
var str = 'hello1 world 123-hello2-789 456hello3world hello4'
str.match(/\bhello\d\b/g)//["hello1", "hello2", "hello4"]
\b单词边界,hello前面有空格,注意-也算边界。

量词

*: 出现零次或多次(任意次) 
+: 出现一次或多次(至少出现一次)
?: 出现零次或一次(最多出现一次) 
x{3}:  x出现三次
{n,m}: 出现n到m次
{n,}:至少出现n次

举例

var str1 = 'http://jirengu.com'
var str2 = 'https://jirengu.com'
str1.match(/https?:\/\/.+/)
str2.match(/https?:\/\/.+/)//["https://jirengu.com", index: 0, input: "https://jirengu.com", groups: undefined]
用+str2可以匹配,str1不行。如果用*不管http有没有s都可以匹配。另外?只对s起作用,如想对http起作用,用(https)括起来。
\t 水平制表符
\r 回车符
\n 换行符
\f 换页符
\cx 与x对应的控制字符
\o 空字符

贪婪模式与非贪婪模式:(重点哦)

用例题来讲解比较好,见上篇。

点我查看

分组:

Byron{20}n匹配20次

.test

作用:检测字符串参数是否存在正则表达式模式,存在返回true,否则为false。例题:

function isPhoneNum(str){
  return /^1[34578]\d{9}$/g.test(str)
}
console.log(isPhoneNum(13898989898))//true

.exec

作用:正则表达式模式在字符串中运行查找,如果exec()找到了匹配的文本,则返回一个结果数组,否则返回 null.例题:

var  str = '123, 456, 789'
var reg = /\d{3}/
reg.exec(str)
["123", index: 0, input: "123, 456, 789", groups: undefined]