之前学了正则表达式,刚好够工作用,以为自己熟悉了,深入看了《精通正则表达式》后发觉还是差了不止那么一点点,感觉又打回原形了,\b\w+(?=ing\b) 、((?<=\d)\d{3})+\b  这些看着都懂,但是出了问题,又不晓得咋改,现在还是把东西都整理整理,以后防止又打回原形。

正则表达式 ━━ 入门_第1张图片

相信认真学过正则的人一开始都有看过正则表达式30分入门教程,这是一篇极好的入门文章,看完会发现开始有点看懂了正则写的是啥玩意儿了,还有各种书籍,都会或多或少提到正则这个东西。。。。

语法与属性

假设你想搜索字符串”cat”,可以用两种方法来定义正则:

var searchWord = /cat/  ;   或者   var searchWord = new RegExp(‘cat’);

如果你通过match()、search()、exec()或者test() 方法在某个字符串上使用这个表达式,它会返回所有包含cat的字符串,不管在字符串中它的位置再哪,如:catalog、concatenation或scat。

1、如果你只希望匹配单词’cat’的字符串,旁边没有任何其他字母,那么需要使用一个 ^ 表示开始以及 $表示结尾:

var searchWord = /^cat$/  ;   或者   var searchWord = new RegExp(‘^cat$’);

2、也可以省略开始标识符^或者结束标识符$

如:var searchWord = /^cat/  ;   这些代码就会匹配cat、catalog、catastrongphe;

如:var searchWord = /cat$/  ;   这些代码就会匹配polecat或wildcat;

3、如果想查找“cat”,而不考虑大小写,那么需要在第二个斜杠(/)后面使用i属性,这样就可以忽略大小写了;

如:var searchWord = /cat/i  ;   这些代码就会匹配cat 、 Catherine、CAT

4、如果有个字符串,在它里面包含了单词”cat”多次,而你想要以数组的形式所有的匹配,你需要添加参数”g”来表示”全局”

如:var searchWord = /cat/g  ;

5、默认情况下,正则只在单行字符串中匹配模式,如果想在多行字符串中匹配一个模式,那么需要使用参数”m”表示“多行”,也可以混合起来用,顺序并不重要

如:var searchWord = /cat/gim  ;

通配符搜索、约束范围、替换

1、句点字符(.)在正则中表示”任意字符”,    var searchWord = /c.t/gim  ;

这个表达式匹配”cat”、”cot”、”CRT”,甚至没啥意思的”c#t”和”c!t” 或者像 “c\tt”这样的包含空格(\t 表示 制表符)

这样的对需求来讲可能弹性太大了,所以我们需要使用方括号([])来把选择的范围限制到想提供的范围内:

如:var searchWord = /c[aou]t/gim  ;    这样就可以匹配所有大小写的”cat”、”cot”、”cut”  ,也可以在方括号内提供一些区间,如a-z匹配所有小写字母,A-Z匹配所有大写字母,而0-9则匹配数字

2、举例来说,如果想要查找所有小些字母后紧跟大写字母的单词,可以使用 : var searchWord = /[a-z][A-Z]/gim  ;

3、可以在方括号内使用字符”^”在搜索条件中排出一个选项,如果避免结果出现”cut”,

可以使用: var searchWord = /c[^u]t/g  ;

4、方括号内每次只匹配一个字符,也就是为啥不会匹配类似”cost”、”coast”或者”cast”这样的字符串了,如果想匹配几个选项,可以在圆括号内使用管道符号(|)  :   var searchWord = /c(^u|a|o|os|oas|as)t/g  ;

现在这个表达式匹配”cat”、”cot”、”cost”、”coast”、”cast”,但是不包括”cut”,因为里面有^u

用量词约束字符的数量

在许多情况下,我们希望允许一定范围内的字符,如a-z,但是限制他们的数量,要达到这个目的,可以在正则里使用量词

1、*   表示  0或多次

2、+   表示  1次以上

3、?   表示  0或1次

4、{n}   表示  n次

5、{n,m}   表示  n~m次

(但是要注意的,在每个表达式后面添加 “?” 意味着正则表达式应该匹配字符串,但次数越少越好)

比如,如果想匹配一串数字的语法,它们由两组4个字符组成,每个之间都由破折号(-)分开,可以使用:

var searchWord = /[a-z|0-9]{4}\-[a-z|0-9]{4}/gim  ;

注意:如果需要对按照字面意思直接使用的字符转移,它们没有正则模式中可能有的特殊含义,如果这个例子中的破折号,可以通过在字符前面添加反斜杠符号(\)来打到这个目的,需要转义的字符有-、+、/、(、)、[、]、*、{、}、和?。例如:/c.t/匹配 “cat”或 “c4t”,而/c\.t/只匹配”c.t” 。

词界、空白字符以及其他快捷符号

所有的这些不同选项都可以产生非常费解的正则表达式,这也是为什么需要提供一些快捷符号的原因。

我们都只有一些表示空白字符的特殊字符符号,如果 \n 表示换行、\t表示制表符,正则也提供一些这样的符号,如:

1、\d         等同于    [0-9]                        含义:整数

2、\D        等同于    [^0-9]                      含义:非整数

3、\w        等同于    [a-zA-Z0-9]            含义:所有字母数字字符、下划线

4、\b                 含义:单词词界

5、\B                 含义:非单词词界

6、\s        等同于    [\t\n\r\f\v]            含义:所有空白字符

7、\S        等同于    [^\t\n\r\f\v]         含义:所有非空白字符

举个例子,如果想验证一个由9位数字组成,在第3位和第5位后面有破折号(如123-45-6789),那么就可以使用下面的正则,带有可选的破折号(使用?数量词),因为有人可能不会输入它们:

var searchWord = /[0-9]{3}\-?[0-9]{2}\-?[0-9]{4}/ ;

作为选择,可以使用快捷符号:

var searchWord = /\d{3}\-?\d{2}\-?\d{4}/ ;

要特别注意一点:如果在引号内或构造器符号中使用快捷符号,需要在前面添加两个反斜杠,而不是一个,因为需要对它们进行转义,如果上面例子换成 new RegExp的话,就是:ar searchWord = new RegExp(‘\\d{3}\-?\\d{2}\-?\\d{4}’,”) ; 

有了这些,我们就可以编写自己的简单的正则表达式了:

var searchWhat = /^[\w]+(\.[\w]+)*@([\w]+\.)+[a-z]{2,7}$/ ;  这样的匹配就可以非常非常容易去理解了

正则表达式的方法

有几个方法将正则表达式作为参数使用。表达式本身被称为模式(pattern),它会匹配你需要获取或检查的信息。

1、pattern.test(string) :检查字符串是否匹配模式,并返回true 或 false;

2、pattern.exec(string) :对字符串和格式进行一次匹配,并返回结果的数组或null;

3、string.match(pattern) :对字符串和模式进行匹配,并将匹配结果作为字符串数组返回,或返回null;

4、string.search(pattern)

5、string.replace(pattern,replaceString)

6、string.split(pattern,limit) ;   limit会限制数组元素的数量

4/5/6都是跟JS的理解是一样的,

这个文章适合刚入门的为了看懂跟写简单正则的人看的,内容从书上摘取,能够让人非常简单就入门了正则。

PS:这篇文章的作者是小波,一个地地道道的帅哥程序猿哦。今天介绍给大家,首先感谢小波在这里抽出时间给大家分享知识。第二也祝大家在这里学习到更多的技能。有什么问题大家可以在下面留言给小波。