低频会用到这个技能,学了又贼容易忘。 只能做笔记了,记一下项目中用到的部分。
特殊字符
-
\d 单个数字[0-9]
-
\D 除了[0-9]
-
[ .] 一个字符集合,匹配方括号中的任意字符,包括转义序列。
-
\w 匹配一个单个字符(字母、数字、下划线),等价于[A-Za-z0-9_]
-
\w+ 匹配多个字符 类比* 匹配
-
\W 匹配到非单个字符
-
[0-9.] 匹配0-9和小数点 . 多个数值方式 [0-9.]+
-
\s 匹配一个空白字符,包括空格、制表符、换行符、换页符
-
\S 非空白字符,
-
i 忽略大小写
-
g 全局
-
$ 字符串结尾
-
() 匹配括号里面表达式,作为子字符串。 也叫 捕获括号。
-
{} 标记限定符,匹配次数。
-
+ 匹配签名表达式1次,或者多次。 等价于{1,}
-
* 匹配前一个表达式0次或者多次。 等价于{0,}
-
? ? 问号代表前面的字符最多只可以出现一次(0次、或1次)
-
^ 匹配字符串开始的地方
-
| 选择
表达式例子: /[1-9][0-9]*/g 匹配结果: 0 1 10 123
表达式例子:/[0-9]{1,2}/
表达式例子: /[1-9][0-9]{0,1}/
表达式例子: /<.*>/ 说明: *是贪婪类型 结果:
dafasdfasdf
表达式例子: /<.*?>/ 相同效果</w+?> 说明: ? 是非贪婪 结果:
定位符
-
^ 匹配输入字符串开始的地方
-
$ 匹配输入字符串结束的地方
-
\b 匹配单词边界,即字与空格间的位置
-
\B 单词中间位置匹配,非边界
表达式例子: /^Chapter [1-9][0-9]{0,1}/
表达式例子: /^Chapter [1-9][0-9]{0,1}$/
表达式例子: /ter\b/ 匹配以ter结尾的单词 /\bCha/ 匹配以Cha开头的单词
表达式例子: /Bapt/ 匹配单词内包含 apt的单词
选择
用()将所有选型括起来,相邻选项用 | 分隔开。
回溯引用
后面部分引用前面已经匹配到的子字符串。(*)
回溯引用的语法像\1,\2,....,其中\1表示引用的第一个子表达式,\2表示引用的第二个子表达式,以此类推。而\0则表示整个表达式。
回溯引用在替换字符串中十分常用。
举例:用$1,$2...来引用要被替换的字符串。
var str = 'abc abc 123';
str.replace(/(ab)c/g,'$1eee');
// 得到结果 'abeee abeee 123'
圆括号会有一个副作用,使相关的匹配会被缓存。此时用 非捕获正则 ?: 放在第一个选型前,来消除这种副作用。
var str = 'stest000'.
str.replace(/(stest00)(?:0)/, '$1,$2')
// 返回stest00,$2
// 由于使用了非捕获正则,所以第二个引用没有值,这里直接替换为$2
前向查找
-
?: 是非捕获元之一 引用表达式(()), 本身不被消费(?),引用(:)
-
?= 正向预查,
举例说明:var str = 'happy happily'; 捕获以happ开头的 副词。 表达式:happ(?=ily)
-
?! 正向负查找
举例说明:var str = 'happy happily';
不要以happ开头的 副词。 表达式:happ(?!ily)
后向查找
说明:后向查找在部分浏览器里支持不好。思路:翻转字串,用正向去解决。完成再翻转就行。
- (?<=regex) 示例:想找到
apple的ple,写法:/(?<=app)ple/ - (?<!regex) 示例:想要查找
apple的ple也可以这么写成/(?<!peo)ple
逻辑处理
-
或 |
-
非 ^和 ! [^regex]和!
-
在字符匹配的时候,需要使用
^这个元字符。 -
只有在
[和]内部使用的^才表示非的关系。