修饰符
-
i:忽略大小写
-
g:全局匹配
-
m:mutiple lines多行搜索
方括号 []
查找某个范围内的字符
-
[abc]:查找方括号之间的任意字符
-
(abc):查找不在方括号之间的字符
预定义类
-
.:查找单个单词,除了换行和结束符
-
\w:查找单词
-
\d:查找数字
-
\s:查找空白字符
-
\n:查找换行符
\W \D \S 查找上面的相反
边界
- ^:匹配以什么开始
- $:匹配以什么结束
- \b:单词边界
- \B:非单词边界
量词
-
*:重复0次或更多
-
+:重复1次以上
-
?:0次或1次
-
{n}:确定匹配n次,n是一个非负整数
-
{n,m}:最少匹配n次,最多匹配m次
方法
-
split(reg|string) 根据匹配到的内容进行split
-
match(reg) 返回匹配的内容
-
test(reg) 能否匹配出来,返回boolean
实践练习
- 非贪婪模式?
// 在量词后面加上?
'12345678'.replace(/\d{3,6}?/g,'a')
// 'aa78',因为123,456各匹配了一次
- 分组
// () 可以达到分组的功能
'a1bac1d1'.replace(/([a-z]\d){3}/g,'W')
// 'Wd1' 匹配到三个
// 分组后可以用$1来表示分组的内容
'2017-02-03'.replace(/({\d{4}-(\d{2})-(\d{2}))/g,'$2/$3/$1')
// '02/03/2017'
// 忽略分组,在分组内加上?:
'2017-02-03'.replace(/({\d{4}-(?:\d{2})-(\d{2}))/g,'$2/$1')
// '03/2017'
-
零宽断言
- 先行断言:exp(?=assert) 先从需要匹配的字符的最右端找到第一个断言中的表达式,然后在匹配其前面的表达式,若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串,若能匹配 则匹配
'a2*3'.replace(/\w(?=\d)/g,'W')
// 'W2*3' 先找到3,然后3前面的a2*继续进行匹配
- 后发断言:exp(?<=assert) 与先行断言相反,从需要匹配的字符串的最左端找到第一个断言中的表达式,然后匹配其后面的表达式
'abcdefghi'.replace(/.*(?<=d)/,'W')
// "Wefghi" 先找到d,然后将d前面的内容替换成W
- 负向前瞻正则:exp(?!assert)
对象属性
- lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置
- source: 文本类型的正则表达式
正则的方法
- /reg/.text(str)
- /reg/.exec(str)
字符串的方法
-
strr.search(/reg/)
// 返回第一个匹配结果的索引值 -
str.match(/reg/g)
// 如果没有全局标识g,那么match方法只能在字符串中执行一次
// 如果没有找到匹配的文本,将返回null;否则返回一个存放匹配文本信息的数组 -
str.replace(/reg/)
把平时看到的文章摘录下来,可能会跟原作者很大的雷同
网友评论