JavaScript正则表达式详解

正则表达式的应用已经相当广泛,之前也多次接触,但是并未真正的系统的学习过,借此机会,好好整理了一下,并加入了es6中关于正则表达式的新语法,希望对大家有点帮助

正则表达式的应用已经相当广泛,之前也多次接触,但是并未真正的系统的学习过,借此机会,好好整理了一下,并加入了es6中关于正则表达式的新语法,希望对大家有点帮助.

一、首先,了解正则表达式的含义,表示方法

  正则表达式又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

   正则表达式的表示方法有两种。

  a.直接量表示.

  /pattern/attributes;  //  /正则表达式主体/修饰符(可选)

  b.RegExp对象表示。在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。

  new RegExp(pattern,attributes);   //   创建RegExp对象(正则表达式主体,修饰符(可选))

  表达式主体。表达式主体(pattern)是一个字符串,指定了正则表达式的模式。

  修饰符。 修饰符(attributes)是一个可选的参数,包含属性 g(全局匹配)、i(不区分大小写匹配)、m(多行匹配),es6中又加入了y(粘连sticky)修饰符,y修饰符跟g类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始,不同在于g修饰符只要剩余位置中存在匹配就行,但是y修饰符必须从剩余的第一个位置开始。

二、正则表达式中的字符。

  1.普通字符。

  字母,数字,汉字,下划线及一些没有特殊定义的标点符号登大多数字符都属于普通字符,正则中的普通字符,在匹配字符串的时候,匹配与之相同的字符即可~ 比如如下代码:

var str = "abcde";

console.log(str.match(/a/)); // ["a", index: 0, input: "abcde"]

  如上代码,字符串abcde匹配a的时候,匹配成功,索引位置从0开始。
  2.元字符。

元字符           描述
. 查找任意的单个字符,除换行符外
\w 任意一个字母或数字或下划线,A_Za_Z0_9,_中任意一个
\W 查找非单词的字符,等价于[^A_Za_z0_9_]
\d 匹配一个数字字符,等价于[0-9]
\D 匹配一个非数字字符,等价于[^0-9]
\s 匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v]
\S 匹配任何非空白字符,等价于[^\f\n\r\t\v]
\b

匹配一个单词边界,也就是指单词和空格间的位置,比如’er\b’可以匹配”never”中

的”er”,但是不能匹配”verb”中的”er”

\B 匹配非单词边界,’er\B’能匹配’verb’中的’er’,但不能匹配’never’中的’er’
\0

查找NUL字符。

\n 匹配一个换行符
\f 匹配一个换页符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\xxx 查找一个以八进制数xxx规定的字符
\xdd 查找以16进制数dd规定的字符
\uxxxx 查找以16进制数的xxxx规定的Unicode字符。

  3.转义字符。需要转义的特殊字符前面加 \

三、正则中[]、{}、()的含义

  1. []:方括号包含一系列字符,能够匹配其中任意一个字符, 如

  [a-z]: 查找从小写a到z中的任意一个字符;

  [^a-z]: 查找除a到z之外的任意一个字符;

  表达式[bcd][bcd] 匹配 "abcde"时候,匹配成功,内容是bc,匹配到的位置开始于1,结束与3;如下代码:

  var str = "abcde";

  console.log(str.match(/[bcd][bcd]/)); // ["bc", index: 1, input: "abcde"]

  2.{}:  { 标记限定符开始的地方, n{x}  匹配包含x个的n的序列字符串.

  3. (): 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰。取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到。

四、量词

n+

匹配任何至少包含一个n的字符串

n*

匹配零个或者多个n的字符串

n?

匹配零个或者1个n的字符串

n{x}

匹配包含x个n的序列字符串

n{x,y}

匹配至少x个,最多y个n的字符串

n{x,}

匹配至少x个的字符串

n$

匹配以n结尾的字符串

^n

匹配以n开头的字符串

?=n

匹配其后紧接指定的n字符串

?!n

匹配其后没有紧接指定的n字符串

 

五、字符串的正则方法

  a. match()方法该方法用于在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配。

  stringObject.match(searchValue) 
  stringObject.match(regexp)

  searchValue 需要检索字符串的值;regexp: 需要匹配模式的RegExp对象。返回值中存放匹配成功的数组; 它可以全局匹配模式,全局匹配的话,它返回的是一个数组。如果没有找到任何的一个匹配,那么它将返回的是null;返回的数组内有三个元素,第一个元素的存放的是匹配的文本,还有二个对象属性;index属性表明的是匹配文本的起始字符在stringObject中的位置;input属性声明的是对stringObject对象的引用.

  var str = "welcome to China";
  console.log(str.match("come")); // [0:"come", index: 3, input: "welcome to China"]
  console.log(str.match("Come")); // null
  console.log(str.match(/come/)); // [0:"come", index: 3, input: "welcome to China"]

  b. replace()方法该方法用于在字符串中使用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子字符串;

  stringObject.replace(需要被替换的字符串或RegExp对象,用来替换的文本或函数);

     返回替换后的新字符串

   注意:字符串的stringObject的replace()方法执行的是查找和替换操作,替换的模式有2种,既可以是字符串,也可以是正则匹配模式,如果是正则匹配模式的话,那么它可以加修饰符g,代表全局替换,否则的话,它只替换第一个匹配的字符串。

  var str = "welcome to China";

  var s1 = str.replace("we","a");
  console.log(s1);// alcome to China

  var s2 = str.replace(/e/,"b");
  console.log(s2); //wblcome to China

  var s3 = str.replace(/o/g,'x');
  console.log(s3); //welcxme tx China

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

  stringObject.search(要检索的字符串或RegExp对象); 

  返回值是stringObject中第一个与regexp对象相匹配的子串的起 始位置。如果没有找到任何匹配的子串,则返回-1;search()方法不执行全局匹配,它将忽略标志g,同时它也没有regexp对象的lastIndex的属性,且总是从字符串开始位置进行查找,总是返回的是stringObject匹配的第一个位置。

  var str = "welcome to China,we are family";

  console.log(str.search("we")); // 0

  d. split(). 该方法把一个字符串分割成字符串数组。

  stringObject.split(separator,howmany);

   separator[必填项],字符串或正则表达式,该参数指定的地方分割stringObject; howmany[可选] 该参数指定返回的数组的最大长度,如果设置了该参数,返回的子字符串不会多于这个参数指定的数组。如果没有设置该参数的话,整个字符串都会被分割,不考虑他的长度。返回值是一个字符串数组。该数组通过在separator指定的边界处将字符串stringObject分割成子字符串。

  var str = "welcome to China,we are family";
  console.log(str.split("e")); // ["w", "lcom", " to China,w", " ar", " family"]
  console.log(str.split("e",3)); // ["w", "lcom", " to China,w"]

六、RegExp对象方法

   1. test()方法该方法用于检测一个字符串是否匹配某个模式。  

    RegExpObject.test(需要检测的字符串);  //返回true or false

  

1   var str = "welcome to China,we are family";
2   console.log(/wel/.test(str)); // true
3   console.log(/will/.test(str)); //false

 

  2.exec()方法: 该方法用于检索字符串中的正则表达式的匹配。

  RegExpObject.exec(需要检测的字符串)  //返回一个数组,存放匹配的结果,如果未找到匹配,则返回值为null;

  该返回的数组的第一个元素是与正则表达式相匹配的文本,该方法还返回2个属性,index属性声明的是匹配文本的第一个字符的位置;input属性则存放的是被检索的字符串string;该方法如果不是全局的话,返回的数组与match()方法返回的数组是相同的。

  var str = "welcome to China,we are family";
  console.log(/come/.exec(str)); //["come", index: 3, input: "welcome to China,we are family"]
  console.log(/will/.exec(str)); // null

  

    

标签: 下划线