发表于: 2019-05-26 21:23:59

1 844


今天完成的事情:

1.继续学习JavaScript高级程序设计

2.继续js任务2,3,4

明天计划的事情:

1.继续学习JavaScript高级程序设计

2.继续js任务2,3,4

遇到的问题:

暂无

收获:

1.正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

定义正则表达式有两种方法,

正则表达式是匹配模式,要么匹配字符,要么匹配位置。

第一种通过"/正则表达式/修饰符"这种形式直接写出来,

第二种通过“new RegExp('正则表达式','修饰符)'”创建一个RegExp对象。

其中修饰符为可选项,有三个取值g:全局匹配;i:不区分大小写;m:多行匹配

正则表达式主要用来进行模糊匹配。

模糊匹配分为横向模糊匹配和纵向模糊匹配。

1、横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的

其实现的方式是使用量词。譬如{m,n},表示连续出现最少m次,最多n次。

比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是字符“b”最少出现2次最多出现5次,最后是字符“c”。

2、纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能。

其实现的方式是使用字符组。譬如[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个。

比如/a[123]b/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"。


字符组。

需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如[abc],表示匹配一个字符,它可以是“a”、“b”、“c”之一。

如果字符组里的字符特别多的话,可以使用范围表示法。

比如[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。

用连字符-来省略和简写。因为连字符有特殊用途,那么要匹配“a”、“-”、“z”这三者中任意一个字符,不能写成[a-z],因为其表示小写字符中的任何一个字符。

可以写成如下的方式:[-az]或[az-]或[a\-z]。即要么放在开头,要么放在结尾,要么转义。

总之不会让引擎认为是范围表示法就行了。


纵向模糊匹配,还有一种情形就是,某位字符可以是任何东西,但就不能是"a"、"b"、"c"。

此时就是排除字符组(反义字符组)的概念。例如[^abc],表示是一个除"a"、"b"、"c"之外的任意一个字符。

字符组的第一位放^(脱字符),表示求反的概念。当然,也有相应的范围表示法。


有了字符组的概念后,一些常见的符号我们也就理解了。因为它们都是系统自带的简写形式。

\d就是[0-9]。表示是一位数字。记忆方式:其英文是digit(数字)。

\D就是[^0-9]。表示除数字外的任意字符。

\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。

\W是[^0-9a-zA-Z_]。非单词字符。

\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。

\S是[^ \t\v\n\r\f]。 非空白符。

.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西。

如果要匹配任意字符可以使用[\d\D]、[\w\W]、[\s\S]和[^]中任何的一个


量词

量词也称重复。

{m,} 表示至少出现m次。

{m} 等价于{m,m},表示出现m次。

? 等价于{0,1},表示出现或者不出现。

+ 等价于{1,},表示出现至少一次。

* 等价于{0,},表示出现任意次,有可能不出现。


var regex = /\d{2,5}/g;

var string = "123 1234 12345 123456";

console.log( string.match(regex) ); 

// => ["123", "1234", "12345", "12345"]

代码其中正则/\d{2,5}/,表示数字连续出现2到5次。会匹配2位、3位、4位、5位连续数字。


var regex = /\d{2,5}?/g;

var string = "123 1234 12345 123456";

console.log( string.match(regex) ); 

// => ["12", "12", "34", "12", "34", "12", "34", "56"]

代码其中/\d{2,5}?/表示,虽然2到5次都行,当2个就够的时候,就不在往下尝试了。

通过在量词后面加个问号就能实现惰性匹配,因此所有惰性匹配情形如下:

{m,n}? 

{m,}?

??

+?

*?


一个模式可以实现横向和纵向模糊匹配。

而多选分支可以支持多个子模式任选其一。

具体形式如下:(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一。

分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了。


^(脱字符)匹配开头,在多行匹配中匹配行开头。

$(美元符号)匹配结尾,在多行匹配中匹配行结尾。



返回列表 返回列表
评论

    分享到