工具:Regexper
实例化RegExp:
- 字面量 /\bis\b/g
- 构造函数 var reg = new RegExp('\\bis\\b', 'g'); (需要转义斜线)
修饰符
- g:global 全文搜索,不添加则搜索到第一个匹配停止
- i:ignoreCase 忽略大小写
- m:multiplelines 多行搜索,以换行符也当成新的一行进行搜索匹配
特殊字符
元字符 | 含义 |
---|---|
\t | 水平制表符 |
\v | 垂直制表符 |
\n | 换行符 |
\r | 回车符 |
\0 | 空字符 |
\f | 换页符 |
\cX | 与X对应的控制字符(ctrl+X) |
\b | 单词边界 |
\B | 非单词边界 |
. | 任意字符 |
* | 0或1或多次,任意次 |
+ | 至少1次 |
? | 0或者1次 |
{n} | 出现n次以上 |
{n,m} | 出现n-m次 |
{n,} | 至少出现n次 |
{0,n} | 最多n次 |
^ | 用着类中表示取反,用在字符串中表示正则的开始 |
$ | 表示正则的结束 |
类别 | 表达 | 例子 |
---|---|---|
字符类 | []泛指一个类 | [abc]匹配abc中任意一个 |
范围类 | [a-z0-9A-Z]匹配[]中的字符 | |
预定义类 | \d:[0-9]数字字符; | |
预定义类 | \D:[^0-9] 非数字字符; | |
预定义类 | \s:空白符; | |
预定义类 | \S:非空白符; | |
预定义类 | \w:[a-zA-Z_0-9]单词字符(字母,数字,下划线); | |
预定义类 | \W:[^a-zA-Z_0-9]非单词字符 |
贪婪模式
正则中默认为贪婪模式
'12345678'.replace(/\d{3,6}/g, 'X') //X78 每6个为一个匹配
非贪婪模式
'12345678'.replace(/\d{3,6}?/g, 'X') //XX78 每3个为一个匹配
分组
使用()能达到分组功能,使量词作用于分组,而不是挨着的字符
- $符:配合分组,$1表示第一个捕获分组,$2表示第二个捕获分组……
- 忽略分组:不希望捕获某些分组,只需要在分组内加上 ?:
或
使用 | 能达到或功能
'abdefcba'.replace(/ab(c|d)ef/g,'X') //Xcba abcefg或者abdefg都可以匹配
前瞻
正则表达式从文本头部向尾部开始解析,所以在文本尾部方向表示“前”
- 正向前瞻 exp(?=assert)
- 负向前瞻 exp(?!assert)
'a1b2c*b#'.replace(/\w(?=\d)/g,'X') //X1X2c*b# 前瞻为数字的匹配
'a1b2c*b#'.replace(/\w(?!\d)/g,'X') //aXbXX*X# 前瞻不为数字匹配
相关属性和方法
对象属性
- global 是否全文搜索,只读
- ignoreCase 是否忽略大小写,只读
- multiline 是否多行搜索,只读
- lastIndex 当前匹配结果的最后一个字符的下一个字符
方法
- RegExp.prototype.test(str)
测试字符串参数中是否存在匹配正则表达式模式的字符串
reg1 = /\w/;
reg1.test('ab'); //true
---------------------------
//特殊情况,在全局搜索下
reg2 = /\w/g;
reg2.test('ab') //true 第一次匹配a
reg2.test('ab') //true 第二次匹配b
reg2.test('ab') //false 第三次则无
while(reg2.test('ab')){
console.log(reg2.lastIndex);
}
// 1
2
undefined
//lastIndex 表示第一次匹配结束的最后一个字符的下一个字符的索引值
- RegExp.prototype.match(str)
- RegExp.prototype.exec(str)
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性;如果没有匹配的文本则返回null,否则返回一个匹配的结果数组。
- index 声明匹配文本的第一个字符的位置
- input 存放被检索的字符串String
网友评论