这是我参与「第五届青训营 」伴学笔记创作活动的第11天
基础
正则RegExp:var re = /正则表达式/标志
-
函数实现:
var re = new RegExp('正则表达式'[,'标志'])
- 带“\”的操作符(如“\d”)需要双重转义,即写为“\”
- 匹配“\”需要改为“\\”
-
方法:
- re.test('字符串'):能匹配则返回true,反之返回false
- re.exec('字符串'):返回包含匹配字符串和分组的类数组,这个数组相当于python的group,匹配失败返回null
-
标志:
-
g:全局匹配:多次执行exec时,每次从lastIndex开始
- re.lastIndex:上次匹配到的最后字符的索引+1位置,下次匹配从这开始
-
i:忽略大小写
-
m:多行匹配
-
tips:可同时包含多个参数
-
-
字符串中的正则方法:
- str.search(pattern):匹配到返回则位置,失败返回-1
- str.match(pattern):同re.exec(),但全局匹配时会返回所有匹配内容,且忽略分组
-
tips:
- 转换为json类型:var js = JSON.stringify(字典[,数组/函数名,' '])
- 转换为javascript类型:var jsp = JSON.parse('字符串'[,函数名])
正则表达式
简洁表达一组字符串
作用: 查找、替换、有效性验证
贪婪匹配: 在匹配到时 , 默认返回最长的字符串,即有多个匹配结果时返回最长的那个;输出最短需在相应操作符后加 ?
\D:非数字,等价[^0-9],\S和\W同理
\s:任意空白字符(如空格),等价于[\n\r\f\t\v](即换行/回车(擦除本行回到行首)/换页/制表/垂直制表)
\b:单词边界,相当于断言,不匹配字符只判断位置
优先级: \ > ()断言[] > *+?{} >^$. > | (相同优先级从左到右运算)
零宽断言
不匹配字符,只用于判断匹配字符位置
- 先行断言(判断后接的字符):匹配字符(?=表达式)
- 后行断言(判断前接的字符):(?<=表达式)匹配字符
- =改为!表示排除
捕获组
- (?P表达式):匹配含有这个表达式的组,并将其命名为name,可以被group('name')捕获
- 不捕获分组:(?:表达式)
- 引用第n个分组作为表达式:\n(n为数字)
Tips
- 转义字符\:即把有特殊含义的字符转化成字面意思
- []内不要嵌套[]
- []中只能匹配单字符,在[]中加()也没用
- 匹配“.” :[.] 或 .(即让“.”转义)
- . 在[]里无法表示为任何单字符,只能表示 . 的字面意思
- [abc]+表示包含abc的单字符及其任何组合,[^abc]+同理 (因为贪婪匹配)
- 若要匹配的字符里有 [ 等保留字符,则需要用 [ 转义表示(指在r''原生字符串中时,非原生则用\[)
- {2,}:要匹配的字符至少重复两次,{,2}表至多
- (ab)+:表示ab至少要连续地出现一次
- {m,n}逗号后不能有空格,且n可以省略