正则表达式

2017-07-03  本文已影响0人  草鞋弟

正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

正则表达式就像筛子一样,从目标字符串中筛出我们需要的内容.

RegExp类型

ECMAScript通过RegExp类型来支持正则表达式
其语法类似Perl的语法:
形式为 * var expression = / pattern / flags; *

1.1-----正则表达式的匹配模式支持以下三个标志:

1.2-----元字符

正则表达式让人望而却步以一个重要原因就是转义字符太多了,组合非常多,但是正则表达式的元字符(在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符)并不多:

并不是每个元字符都有特定的意义,在不同的组合中元字符有不同的意义,分类看一下:
\t -----------------水平制表符(即table按键产生的效果,会生成8个空格)
\r -----------------回车符(即enter键的效果)
\n -----------------换行符(顾名思义,会产生换行效果)
\f -----------------换页符(应该是针对打印机的命令,走纸换页是针对打印机输出时的命令符)
\cX -----------------与X对应的控制字符(Ctrl+X)
\v -----------------垂直制表符(垂直制表符应该垂直空几个格,效果类似于连续enter几下)
\0 -----------------空字符(代表为空null)

1.3----字符类

一般情况下正则表达式一个字符(转义字符算一个)对应字符串一个字符,表达式 ab\t 的含义是;

但是我们可以使用元字符[]来构建一个简单的类,所谓类是指,符合某些特征的对象,是一个泛指,而不是特指某个字符了,我们可以使用表达式 [abc] 把字符a或b或c归为一类,表达式可以匹配这类的字符


1.4----取反

元字符[]组合可以创建一个类,我们还可以使用元字符^创建反向类/负向类,反向类的意思是不属于XXX类的内容,表达式 [^abc] 表示不是字符a或b或c的内容

1.5----范围类

我们可以使用 x-y来连接两个字符表示从x到y的任意字符,这是个闭区间,也就是说包含x和y本身,这样匹配小写字母就很简单了

1.6----预定义类

预定义类 范围 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 单词字符,字母、数字下划线
\W [^a-zA-Z_0-9] 非单词,字符,下划线
[\x{4e00}-\x{9fa5}] 表示utf8编码之后的中文范围内中的任意一个

转义字符相关

1.7----边界

正则表达式还提供了几个常用的边界匹配字符

字符 含义
^ 以xxx开头
$ 以xxx结尾
\b 单词边界
\B 非单词边界

1.8----量词

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

1.8----贪婪模式与非贪婪模式

分组,或,分组嵌套,忽略分组,前瞻(待补充完善)


2相关方法

2.1------RegExp实例对象有五个属性

2.2----RegExp.prototype.test(str)

该方法用于测试字符串参数中是否存正则表达式模式,如果存在则返回true,否则返回false.

2.3-----RegExp.prototype.exec(str)

方法用于正则表达式模式在字符串中运行查找,如果exec()找到了匹配的文本,则返回一个结果数组,否则返回 null

除了数组元素和length属性之外,exec()方法返回对象还包括两个属性。

全局调用

非全局调用

2.4----String.prototype.search(reg)

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串

search() 方法不执行全局匹配,它将忽略标志g,它同时忽略正则表达式对象的lastIndex属性,并且总是从字符串的开始进行检索,这意味着它总是返回字符串的第一个匹配的位置

2.5----String.prototype.match(reg)

match()方法将检索字符串,以找到一个或多个与regexp匹配的文本。但regexp是否具有标志 g对结果影响很大。

全局调用

非全局调用

2.6----String.prototype.replace(reg, replaceStr)

复习部分





(长度6-20个字符,只能包括字母、数字、下划线)

   function isValidUsername(str){
      var reg = /^\w{6,20}$/
      return reg.test(str)
  }
      var str = 'aabbcccvvddd';
      console.log(isValidUsername(str));

var reg =/#[0-9a-fA-F]{6}/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee ";
console.log( subj.match(reg) ) ; // ['#121212', '#AA00ef']
上一篇 下一篇

猜你喜欢

热点阅读