今天学习了Javascript 中的正则表达式相关内容,为了自己更好的记住,总结如下:
实例化RegExp对象:
- 直接量 eg:
var reg=/\bis\b/
匹配单词 is - 构造函数 eg:
var reg=new RegExp('\\bis\\b','g')
匹配全文中的单词 is
修饰符:
- g:global 表示全文搜索,如果不添加g修饰符,则匹配到一个子字符串就停止。
- i:ignore case 表示忽略大小写,不添加的情况下对大小写敏感。
- m:multiple lines 表示多行搜索,在有换行符的情况下,每一行都当做开头。
此外,这几个也是JS对象属性,默认值都为false。除了这三个属性,JS对象还有如下两个属性: - lastIndex:当前表达式匹配内容的最后一个字符的下一个位置;当不是全局匹配的时候对该属性没有影响。
- source:正则表达式的文本字符串。
元字符:
指的是有特殊含义的非字母的字符,如下所示:
除此之外还有: + ? $ ^ | \ ( ) { } [ ]等,下面一一介绍一下。
-
元字符[ ]用来构建类,并且在[ ]组成的类中是可以连写的:如
[a-zA-Z] 用来匹配小写和大写字母。有许多预定义类,如下表格所示:
-
元字符{ }加数字一般用来表示量词,还有?+ *也是,如下:
使用量词时可能涉及到贪婪模式与非贪婪模式。
贪婪模式:尽可能多的匹配,默认为贪婪模式;
非贪婪模式:尽可能少的匹配,通过在量词后面加?来实现。var a="12345678"; var reg=/\d{3,6}/; a.replace(reg,"X")
结果为:"X78"
var a="12345678"; var reg1=/\d{3,6}?/; a.replace(reg1,"X")
结果为:"X45678"
-
元字符( )用来达到分组的效果,可以使量词作用于分组。分组的内容可以用$1、$2等来获取。如果不希望分组的内容用$获取到,可以在分组内加上?:就行了。
var reg=/\d{2}(\w)\d/; var x="112t3er45"; x.replace(reg,"$1")
结果为:"1ter45"
var reg=/\d{2}(?:\w)\d/ var x="112t3er45"; x.replace(reg,"$1")
结果为:"1$1er45"
-
元字符 | 表示或的含义;
-
元字符$和^:可以用做边界字符:
注意:^在[ ]内部的时候是表示反向,如[^a-z] 不包括字母a到z;
正则表达式还有两个常用的方法:
- test():匹配成功为true,不成功为false。
- exec():返回一个结果数组。
属性index:声明匹配文本的第一个字符的位置;
在非全局调用下,返回的结果数组中:第一个位置是返回的匹配文本;第二个位置是匹配的第一个子表达式文本,即第一个分组的匹配文本;同样依次第三个位置是第二个分组的内容……
字符串对象关于正则表达式也有一些方法:
- search(reg):返回第一个匹配结果的index,不支持全局匹配,会忽略g修饰符。
- match(reg):找到一个或多个匹配文本,以数组形式返回。在非全局调用下的返回值与exec返回值是一样的。在全局调用下只以数组的形式返回匹配的多个文本内容,不包含分组内容以及index属性等内容。
- split(reg):分割字符串,返回数组
- replace(reg,replaceStr) 替换字符串
前瞻:分为正向前瞻(符合断言)和负向前瞻(不符合断言)。在Javascript中不支持后顾,所以这里不再讨论。文本尾部为前,在正则表达式匹配到规则时,向前检查是否符合断言。 匹配的内容中不包括断言部分。
(?=)正向前瞻 (?!)负向前瞻
var reg=/\d\w(?=\d)/;
var x="23w4e";
x.replace(reg,"X");
结果为:"2X4e"
var reg=/\d\w(?!\d)/;
var x="23we";
x.replace(reg,"X");
结果为:"Xwe"