正则表达式

107 阅读1分钟

正则表达式方法

1.var reg = /^abcd/g;字面量
2.var reg= new RegExp(/abcd/,'g')构造函数

^ $
let str = /^a$/   开始结束符的限定
[^] 里面的^表示取反  也就是括号里面有的都返回false 

正则表达式方法
reg.test(str) 检测一个字符串是否匹配某个模式 str内是否包含reg  true/false
reg.exec(); 
reg.lastIndex()查找index游标(类数组如下标) 是有全局匹配才会改变g

字符串方法
str.match(reg) 在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
str.search(reg) 在字符串中检索reg匹配第一个值的下标 没有返回 -1 
  str.replace(reg) g可以全匹配
  var reg = /(\w)\1(\w)\2/g  
  str = 'aabb'
  str.replace(reg,'$2$2$1$1')可以引用方法里面的通过$翻转
  str.replace(reg,fn($,$1,$2))第二个参数可以使函数
  题目
  var str = 'the-first-name';
  var reg = /-\w/g;
  str.replace(reg,function($,$1) { return $.toUpperCase() }))
字符串不用 RegExp str.replace(a,b)不是全匹配

括号

括号合集
1.大括号
{} 量词
2.中括号
[] 多选一
3.小括号
()优先级
[abc] 没有量词都(单选) a||b||c
let str = /[abc]/ 方括号包含其中任何一个字符都返回true 
()优先级
let str = /^abc{3}$/ 让c重复3let str = /^(abc){3}$/ 让abc重复3
预定义类
\d      等价于 [0-9] 匹配数字
\D      等价于 [^0-9] 取反 匹配除了数字之外的字符 
\w      等价于 [A-Za-z0-9_] 字母数字下划线 
\W 	等价于 [^A-Za-z0-9_]  取反 字母数字下划线 之外的数
\s	等价于[\t\r\n\v\f] 匹配空格包含(换行符 制表符 空格符等)
\S	等价于[^\t\r\n\v\f] 匹配非空格符的字符

量词

量词 满足条件true
匹配字符串时字符的长度(贪婪匹配原则
n* * 重复0次或者多次
n+ + 重复1次或者多次
n? ? 重复1次或者0次
中间不要有空格
 {n}   自定义n次
 {n,}  自定义返回n次或者n次以上
 {n,m} 自定义大于等于n且小于等于m的 --> {3,5} 自定义35个
非贪婪匹配原则 加问号
{3,5}?有3绝对不取5
 
 let str = /^a*$/  出现0~无数个a
 let str = /^a+$/  出现1~无数个a
 let str = /^a?$/  出现1 || 0 a
 let str = /^a{3}$/ 出现3个a
 let str = /^a{3,}$/ 出现3个a及以上的会返回true
 let str = /^a{2,4}$/  出现大于等于2且小于等于4的返回true 
 str.test('aa')//true
 str.test('aaaaa')//false
座机号码
\d{3}-\d{8}|\d{4}-\d{7}

g 全局匹配
i 忽略大小写
gi 全局匹配 + 忽略大小写

let num = '1234446';
num.replace(/4|6/g,'*') //123****

正向预查 非正预查
?=n  匹配任何其后紧接指定字符串 n 的字符串。
var reg = /\a(?=b)\/g  查找后面跟着ba
?!n
var reg = /\a(?!b)\/g  查找后面不跟着ba