你想要的正则表达式笔记
入门常识:
转义字符
\ 可以把后面的符号强制转化为文本
\n 换行
系统规定字符串不能多行显示
用转义字符可以实现,或者加号
正则表达式
匹配特殊的字符或有特殊搭配原则的字符的最佳选择
尤其是用户名和密码:一般都会格式校验
邮箱地址,电话,主要是对字符串判断
两种创建方式:
-
直接量
语法:/正则表达式主体/修饰符(可选)
-
new RegExp()
第一个参数还可以直接把独立的正则表达式添加进去,而且是独立的
如果不加new的话,就是正则表达式的引用
修饰符
多行匹配的解释:
首先字符串得多行
^a表示以a开头的字符串,上述结果如下
虽然加了换行符,但是还是看做一行字符串的
因此必须采用多行匹配才能获取两个a
多行匹配主要是和开头和结尾配合用的。
正则表达式相关方法
-
reg.test(str): 有满足的就返回true,没有就返回false
-
str.match(reg): 把符合的选择出来,这是字符串的方法,不过经常使用
-
reg.exec(str) :返回数组,存放匹配的结果 ,常与 lastIndex属性联用
lastIndex值就是返回数组中的index。
ps: lastIndex值可以手动修改控制返回匹配的位置;此外如果不加g修饰符, lastIndex值一直为0.
-
str.replace( ) : 替换匹配值
字符串去匹配没有访问全局的能力
如果不加g修饰符就和之前一样的
正则表达式主体
-
方括号[ ] : 表示在范围中取一个值
-
^: 写在表达式[ ]里面表示非
-
( | ):括号表示优先级高一点而已
| 表示或者,bd 和 v中选择一个
元字符
和表达式是一个东西
-
\w 和 \W
当然也可以写在方括号里:表示其中范围的一个
ps:以上组合可以匹配任意字符。
-
\d 和 \D
-
\s 元字符:用于查找空白字符。
在正则表达式里写空格就是真的空格。
-
\b 单词边界 和 \B 非单词边界
这是选择的左边界,如果两端都设有边界就是下列情况,只能获取中间的abc
-
Unicode编码
编码是分层的,16进制16层
我们通常使用的是第一层,简化就是\u0000 - \uffff
小例子:
量词
-
n+ :表示字符出现1到无穷多次
-
n* : 表示出现0词到多次
与n+ 相比出现“”的原因是识别7次之后光标移到g的后面,有段逻辑距离,再往后就只能显示0次,则为空了。
出现8个空的原因是根据光标移动来的。
贪婪原则:能取多就不会取少
打破贪婪原则:n?? 或者 n*? ;能取0就不会取1
量词量的是前面的n,保证每一个都来自同一个区间。
-
^n 开始 和 n$ 结束
上式表达的是只有ab
- 正向预查或正向断言
/a(?!b) 后面不是跟着b的。
一个实例:检验一个字符串首尾是否含有数字
检验一个字符串首尾是否都含有数字
中间随便填都可以。
一些拓展
例1:找相同的
(n)\1 : 表示反向引用第一个匹配的值;(n)表示子表达式
例2:找aabb类型的
例3:将aabb转为bbaa
$1表示引用第一个子表达式,$2表示引用第二个子表达式。
还可以用这种方式:
例4:转为小驼峰
该function()匹配了多少次就会执行多少次。
例5:字符串去重
例5:数字每隔三个打个逗号
“100000000”—— 100,000,000
思路:从后往前,使用$, 3的倍数,替换空。