正则表达式都是操作字符串的,由特殊字符与普通字符组成。
var pattern = /js/;
var str = "I love js"
var pattern = new RegExp('js', 'i');
console.log(pattern.test(str));
console.log(pattern.exec(str));
用变量创建模式
exec方法有input 就是输入的str
index就是开始匹配到的索引
修饰符
. 匹配除换行符以外的所有字符
语法
个数
{2} 匹配两个 {1,2}匹配1个或者2个 {1,3} 匹配1个或者3个
{1,} 匹配至少1个 ?用法等于 {0,1}
在? * + 后面加 ? 将贪婪匹配转为非贪婪匹配 只匹配一次
选择
| 选择匹配 a | ab 匹配a或者ab 从左边先开始匹配 从上到下
分组
将ab看为一个整体
在前加 ?: ab就不会被捕获 否则会输出 abc ab
从左边括号开始捕获 abc bc c
使用\1代表之前第一个分组中的内容 不属于分组
输出:
分组的应用
前瞻性匹配
只匹配后面为script的java
只匹配后面不为script的java
首尾匹配
^ $
只匹配数字
单词边界 \b
通俗一点讲,如果存在字符\w和\W相邻,那么这两个字符之间就有单词边界
全局匹配
输出结果:
test机制类似 返回true与false
第一行匹配第一个js 第二行匹配第二个 第四行返回 null 因为匹配完了
第五个又开始从第一个开始
但是第五个又是第0个索引 lastIndex重置为0
lastIndex:lastIndex从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为0的,第一次查找完了的时候会把lastIndex的值设为匹配到得字符串的最后一个字符的索引位置加1,第二次查找的时候会从lastIndex这个位置开始,后面的以此类推。如果没有找到,则会把lastIndex重置为0。
非全局匹配 lastIndex均为0
RegExp对象
1与2类似 返回字符串 3 返回他本身
1 判断有没有i
2 判断有没有g
3 判断有没有m
Pattern.source 返回字面量形式的字符串
匹配一个
input只有在调用了exec 或者test 后才能输出 就是输入的字符串str 别名 $_
lastMatch 最近一次匹配的字符 别名 $&
Left 匹配的字符 左边的字符
Paren 上次匹配到的子选项 j 分组
RegExp .$1 获取第一个分组 最多可以有9个
search返回 模式在字符串中匹配的位置 5 没有匹配到 返回-1
Search与 全局匹配g 关系不大 match 关系大 全局匹配在search中没用
match与exec 相像 匹配成功返回 否则返回null
Match 全局匹配时 一次返回所有匹配的
拆分
加不加g不重要
replace
引用
几个字就变成几个 *