JavaScript的正则表达式

来源:互联网 发布:淘宝情侣睡衣哪家好 编辑:程序博客网 时间:2024/05/17 15:41

JavaScript的正则表达式是Perl5正则表达式的一个子集;
一般来说,JavaScript的正则表达式的创建方式有两种:

  1. RegExp()构造函数创建正则表达式的模型对象;
  2. 大多数情况,都是通过一种特殊的直接量语法来创建。

比如我们创建一个匹配所有字母为s结尾的字符串。

  1. 第一种语法格式:new RegExp(“s$”);
  2. 第二种语法格式:/s$/;

我们来解释以下上面的这段代码的意思,所谓的直接量就是包含在“/”之间的所有字符。而$符号称为元字符,它类似于一种命令,让这段代码匹配字符串的结尾部分。而这个s就是字面匹配

但是在实际操作中,光有字面匹配只能匹配字母和数字,对于表格,换行,换页,回车这些非数字非字面的字符,Javascript正则表达式也有对应匹配,这种匹配我们称之为非字面字符匹配。它的特点在于前缀加有反斜杠‘\’。
如:

  • \t 制表符
  • \n 换行符
  • \f 换页符
  • \r 换页符

以上所述的匹配都是简单的直接量字符匹配,也就是比较耿直对某单个字符比如abc,一个空格进行匹配。但是在实际操作中,我们很多时候是需要对一个类型的直接量字符的大量匹配。这时我们就需要字符类匹配

字符类匹配

定义:把多个直接量字符放入[]中,就组成了字符类。字符类用于匹配其中所包含的任意字符。注意:^符号表示完全相反的匹配。

e.g:

  • 匹配字符串“apple” 直接量表达:/apple/;
  • 匹配字符串 ‘a’,’p’,’l’,’e’, 字符类匹配就是:/[aple]/
  • 除此之外:/[^aple]/
  • 特殊表达方式如,小字母全匹配:/[a-z]/,只要是拉丁字母和数组就全匹配:[a-zA-Z0-9]
  • [a-zA-Z0-9]的简写形式是\w,一般用于匹配英文单词
  • [^a-zA-Z0-9]的简写形式是\W
  • [0-9]简写形式是\d ,一般用于匹配数学数字。
  • 空格符号全匹配简写形式\s

重复匹配
又称之为贪婪匹配,用于同一字符类中的N个大批量字符串匹配

e.g:

  1. /\w {10} / 匹配10个单词;
  2. /\w {3,100}/ 匹配3~100个单词;
  3. /\w {10,}/ 匹配10个以上单词;
  4. × 匹配0个以上字符类;(后缀)
  5. ? 匹配一个可选字符类 这个字符类可有可无;(后缀)
  6. 某某+ 匹配一个以上字符类;(后缀)

非贪婪匹配

暂无

正则表达式的选择

| 管道符表示,中文的语义我们称为 ”或 “,比方说:/China|US|Japan/,的直接量模型,我们可以匹配这三个单词中的任意一个。
再比分说: /\d{3} | \w{7}/就会匹配3个数字或者7个英文单词。

注意:管道符的匹配顺序是从左到右,匹配到它对应的字符串时它就会收工,比如/a|ab/ ,当匹配到apple这个单词,你就别想它再去匹配able这个单词。

正则表达式的组合

( )圆括号将多个条件项组成一个单元匹配项。
我们可以通过多条例子来进行说明:

  1. /java(Script)?/ 这段表达式的意思就是至少匹配java,对于后面的Script呢?这个可以有,这个真没有。都无关紧要。
  2. 子模式的抽取,比如我们希望匹配一段字符串有字母也有数字的字符串。但是我们的重点在于这后面的数字,所以我们可以这样定义一个模型(/[a-z]+(\d)+/).
  3. (?:……..)只组合。

指定位置匹配

  1. /^IBM$/ 这个表达式的意思就是匹配I开头,M结尾的单词。

正则表达式的匹配方法

当我们建立好一个正则表达式的匹配模型的时候,我们需要String的方法对目标字符串进行模型匹配。这里一共有四种匹配方式。

  1. 字符串.search(正则表达式 );
  2. 字符串.replace( 正则表达式,替换字符串 );
  3. 字符串.match( 正则表达式 );
  4. 字符串.split( 正则表达式 );

一:先说第一种.match()方法:

在匹配到目标字符的时候:
它return的是一个数组形式,第一个元素是匹配到的第一个字符,第二个元素是索引值,第三个元素input进来的那堆字符文本。

如果没有匹配成功:
有的js版本返回的是-1 有的则是 null;

注意事项:它不是全局检索,它找到第一个匹配目标字符后就收工。

二:replace( )方法
这个方法用于对源文件进行字符串替换改造,return出来的值就是改造后的源文件。
第一个参数模型,第二个参数就是用于替换的字符串。

这个方法可以通过加注修饰符设置全局匹配,和非全局匹配。

非全局匹配,比如:
example.replace(/Anhui/,”Wan”);
它就在源文件中,把它索引到的第一个Anhui这个单词替换成Wan之后就收工。

全局匹配,比如:
example.replace(/Anhui/g,”Wan”);
在我们添加了全局修饰符g之后,这个源文件中所有Anhui单词都会被替换成Wan.

0 0