javascript正则表达式学习笔记

使用规则

用//包裹语句
\b 单词边界
* 转义\
g 全文搜索
m换行搜索
i 忽略大小写
lastIndex 是当前表达式匹配内容的最后一个字符的下一个位置
source 正则表达式的文本字符串
字符类 泛指 [abc] 把a或b或c归为一类(匹配abc中任意一种) 取反^  [^abc]
范围类 [a-z] 匹配从a到z的任意字符 也可以连写[a-zA-Z] 如果想匹配横线 [0-9-] 比如匹配所有数字包括横线 就可以在后面继续跟一个横线
. [^\n\r] 除了回车和换行之外的所有字符
\d 数字字符
\D 非数字字符
\s 空白符
\S非空白符
\w 单词字符(字母 数字下划线)
\W非单词字符
^开始 $ 结束 \B非单词边界

量词

?出现0次或1次(最多1次)
+ 出现1次或多次(至少1次)
* 出现0次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

非贪婪模式

量词后面加? 意思是不用匹配最多的,匹配最少次出现的即可
如:"12345678".replace(/\d{3,6}?/,"x") 输出:xx78

分组

用()可达到分组的功能
(book){3} book出现3次
'a1b2c3d4'.replace(/([a-z]\d){3}/g, 'x') 输出:xd4

或 |

使用| 可以达到或的效果
'ByronsperByrCapser'.replace(/Byr(on|Ca)sper/g, 'x') 输出:xx

反向引用

'2016-11-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$3/$2/$1') 输出:'25/11/2016'

忽略分组

不想捕获某些分组,不做处理,只需在分组内加上?:就可以 如(?:Byron).(ok)
.为任意字符 Byron被忽略 只需处理ok

正向前瞻

/\w(?=\d)/ 匹配到单词字符(数字也是单词字符)然后向后看看是否是数字
'a2*34v8'.replace(/\w(?=\d)/g, 'x') 输出:'x2*x4x8'

正则方法

text exec search
'sas12sd21ad1sd'.search('1') 输出3
search方法查找出返回index 找不到返回-1
写入正则表达式会自动忽略g
match
split方法中也可以传入正则

'a1b2c3d4e5'.replace(/(\d)(\w)(\d)/g, (match,g1,g2,g3,index,origin)=>{
	console.log(match);
	return g1+g2;
})
posted @ 2021-02-28 12:55  海常7号  阅读(42)  评论(0编辑  收藏  举报