彻底理解正则表达式的^$符

JS 正则表达式^$详解

MDN描述

我们知道正则是一种匹配模式,要么匹配字符,要么匹配位置。这里我们得从这两种匹配情况分别解释这两个字符。

从匹配字符角度

当用于匹配字符时,^与$更多是作为匹配出精准结果的辅助条件

1
2
'123'.match(/^\d/g);//[1]
'123'.match(/\d$/g);//[3]

从匹配位置角度

所以当我们在匹配位置时,^$也成为了我们需要匹配的结果,例如:

1
'1234'.replace(/^|$/g, '❀');// "❀1234❀"

当然,在匹配位置时^$也是帮助我们精确位置的辅助条件,比如常用的千位分隔符正则:

1
'12345678'.replace(/''(?!^)''(?=(\d{3})+$)/g, ',');// "12,345,678"
1
2
'12345678'.match(/(?!^)(?=(\d{3})+$)/g)
// 输出['', '']

刚学正则的时候,很难理解^$同时存在是怎么匹配的,现在想想其实同时写时只是限制字符的起点与终点

1
2
3
4
5
// 栗子
/123/.test(' 123 ') //true
/^123$/.test(' 123 ') //false
/^123$/.test(153) //false
/^123$/.test(123) //true

注意

^除了作为脱字符表示从头匹配,开头位置两个含义外,还能作为反义字符使用

1
2
/[^123]/.test(3) //false
/[^123]/.test(4) //true

多行模式

[^]可以匹配任何字符,包括/n

1
2
3
4
5
var s = "Please yes\nmake my day!";
s.match(/yes.*day/)
// Returns null
s.match(/yes[^]*day/)
// Returns 'yes\nmake my day'
-------------要说再见啦感谢大佬的光临~-------------