1.js创建正则表达式
js创建正则表达式有2种方式
1.显示的使用Regex对象,
var regex = new Regex("\\d*","img");
2.采用纯文本的写法
var regex = /\d*/img;
上面2种写法是等价的,
由于JavaScript字符串中的“\”是一个转义字符,因此,使用显式构造函数创建RegExp实例对象时,应将原始正则表达式中的“\”用“\\”替换
2.正则表达式的定义
js正则表达式是perl5正则表达式语法的子集,有些perl5的正则语法并不被支持如:\a,\e,\l,\u等,(?<=)正向后行断言和(?<!)负向后行断言,(?)的语法等。
正则表达式的模式规则是由一个字符序列组成的,包括字母,数字和符号,通常匹配都是按照字符的字面含义匹配,但是还有些特殊语义的字符比如 \d匹配所有数字,特殊语义的字符让正则的功能更为强大。
3.正则表达式的字符类
字符 | 匹配 |
---|---|
[…] | 中括号内任意的字符,例如[abc]表示匹配abc中的一个 |
[^…] | 除了中括号内任意的字符,例如[^abc]表示匹配不在abc中的任意一个字符 |
. | 点表示任意字符 |
\w | 等价于[a-zA-Z0-9] |
\W | 等价于[^a-zA-Z0-9] |
\s | 任何unicode 空白符 |
\S | 任何非unicode 空白符 |
\d | 等价于[0-9] |
\D | 等价于[^0-9] |
\n | 换行符 |
\r | 回车 |
\t | 制表符 |
3.正则表达式的重复字符语法
字符 | 含义 |
---|---|
{n,m} | 前一项至少匹配n次,最多匹配m次 |
{n,} | 前一项至少匹配n次,或更多次 |
{n} | 前一项匹配n次 |
? | 前一项0次或者一次,至多一次 |
+ | 前一项匹配1次或多次 |
* | 匹配0次或多次 |
当我们匹配重复的字符串时,用以上例子,它会尽量的多去匹配,我们称之为贪婪匹配,如果要尽可能少的匹配我们称之为非贪婪匹配,非贪婪在前面的字符的基础上加上?,例如{1,6}?,??,+?,*?,
例如
<script>
var regex1 = /a+?/;
var regex2 = /a+/;
var str = "aaaa";
console.info(regex1.exec(str));
console.info(regex2.exec(str));
</script>
匹配结果为 a,aaaa,非贪婪会尽可能的少匹配,这有时可能不是我们想要的结果
4.选择,引用,分组
4.1 选择
正则表达式的语法中,"|" 可用来表达选择项,选择项会从左到右,一旦匹配,会忽略其他匹配项,例如 /a|ab|abc/ ,字符串"abc",匹配的结果是a,
4.2 分组,引用
正则表达式的圆括号"()"有多个作用,其中一个就是可以把单独的项作为一个子表达式,以便可以用重复的字符作用一个整体,例如 /a(bc)+/,表示匹配 a后面跟多个bc项,当目标字符串和正则表达式匹配之后,圆括号匹配的结果,会单独存贮起来,称为组,我们在正则表达式中,可以通过,\n,n表示数字,这个数字代表带圆括号的子表达式在正则表达式中的位置,可以单独引用这个组,例如 /(\d)+a\1/,会匹配以a为中心,左右2边一样的字符串。分组可以嵌套:当嵌套分组存在时,每个组的序号是从左往右,左括号的位置, 例如表达式
/(ab)*((\d+) | abc)+(\w?)/
第一个组为:(ab)
第二个组为:((\d+) | abc)
第三个组为:(\d+)
第四个组为:(\w?)
如果不想分组被引用可以使用(?:…)该表示只是分组,但是不会保存匹配的项,例如
/(?:ab)*((\d+) | abc)+(\w?)/
\1表示((\d+) | abc)匹配的项
\2表示(\d+)匹配的项
\3表示(\w?)匹配的项
5.匹配的位置
正则表达式中有一类元素只匹配字符间的位置,而不是字符
字符 | 含义 |
---|---|
^ | 匹配字符串开头,多行中,匹配一行的开头 |
$ | 匹配字符串的结尾,多行中,匹配一行的结尾 |
\b | 退格符直接量,匹配单词边界,就是用在你匹配整个单词的时候,\b只是匹配字符串开头结尾及空格回车等的位置, 不会匹配空格符本身,很多人把\b和\s搞混了,\b只会匹配位置,不会匹配空格符本身。 |
\B | 匹配非单词边界的位置 |
(?=p) | 接下来的字符要求和p表达式匹配,匹配的结果不会包含p匹配的部分 |
(?!p) | 要求接下来的字符都不和p匹配,也只是匹配位置 |
例如 /abc(?=\d*)/ 有字符串"abc1234",匹配结果是abc,
6.修饰符
字符 | 含义 |
---|---|
i | 忽略大小写 |
g | 执行一个全局匹配,而不是找到一个匹配就返回,此处应了解,每一个表达式中有一个lastIndex属性,从0位置开始,如果为全局匹配模式,匹配成功,lastIndex将指向下一个将要匹配的字符索引的位置,如果失败将重置为0,如果不为全局匹配模式,无论成功失败都将重置为0 |
m | 多行匹配模式 |