正则

正则

RegExp

前言

  • 转义操作符 \

  • 多行字符串 利用 \ 来表示换行

/*字符串换行用\*/
var str =  "dkhdsjh\
dahjdh\
ddjhf";

/*。。。。。。。。。。。。。。*/

 

定义 / 创建

  1. var reg = /abc/g; //推荐

    • typeof reg -> object
  2. var regExp1 = new RegExp('abc', 'g');

    • **注意:**此种创建方法传入的字符串某些字符需要转义,所以不建议使用

    • 第一种的字面量正则表达式可以当做参数传入new RegExp()中,返回的是和字面量表达式一模一样的正则表达式对象

    • typeof reg1 -> object

匹配规则修饰符

  • i  执行对大小写不敏感的匹配。

  • g  执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

  • m  执行多行匹配(第一行匹配完后接着下一行)

表达式

  • [abc]   查找方括号之间的任何一个字符。

  • [a-z]   查找任何从小写 a 到小写 z 的字符。

  • [A-Z]   查找任何从大写 A 到大写 Z 的字符。

  • [0-9]   查找任何从 0 至 9 的数字。

  • a | b   匹配a 或 b

子表达式

  • (abc)

    • var reg = /a(a | b)c/g;

    • 上边的(a | b)就是一个子表达式

反向引用,针对子表达式的引用

  • \num, 代表的死第num个子表打死匹配成功后的实际内容

  • eg: (\w)(\w)\1\2 'abab'

(?:n)

  • 不记录字表达式n内容,即无法反向引用之

元字符

  • . 除了换行(\n)和行结束符以外的单个字符

  • \w  查找单个单词字符(a-z,A-Z,0-9,_)

  • \W  非单词字符的一个

  • \d  一个数字(0-9)

  • \D  一个非数字字符

  • \s  一个空白字符(空格符, 制表符(\t), 回车符(\r),换页符(\f),垂直制表符(\v))

  • \S  一个非空白字符

  • [\s\S]  任意字符

  • \b  单词边界

    • eg:  \bx,以x作为单词左边界;

    • eg:  x\b,以x作为单词右边界;

  • \B  非单词边界

  •  .   匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用 '[.\n]' 的模式

量词

  • n+  一个或多个连续(至少有一个n,尽可能多匹配)

  • n*  零个或多个连续(可以没有,尽可能多匹配)

  • n?  零个或一个 (尽可能多匹配)

  • n{x}  x个连续

  • n{x,y}  x-y,范围之间个连续(尽可能多匹配)

  • n{x,}  x-正无穷,范围之间个连续(尽可能多匹配)

  • ^n  以n开头

  • n$  以n结尾

    • ^ab$  以a开头,后紧接着以b结尾(定义字符串的首尾边界)

    • eg: ^bb$,对于b,或 basdab 匹配失败

    • ^acb$ 以a开头,以b结尾,中间为c,即abc才可匹配成功

    • ^ac+b$ a开头,b结尾,中间一个或多个c

  • 注意:在量词组合后加个?,变为非贪婪模式

  • 应用:检测首尾是否含有数字:^\d|\d$

争相预查正向断言:

  • n(?=abc)  仅当n后是abc时才匹配成功,但返回的不包括abc,括号内仅起判断作用

  • n(?!=abc)  仅当n后不是abc时才匹配成功,但返回的不包括abc,括号内仅起判断作用

对象属性

  • global  RegExp对象是否具有标志 g。

  • ignoreCase  RegExp对象是否具有标志 i。

  • lastIndex  一个整数,标示开始下一次匹配的字符位置。

  • multiline  RegExp对象是否具有标志 m。

  • source  正则表达式的源文本。

正则表达式对象方法:

  • exec()

    • 如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。

    • 此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配 的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类 推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的 位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方 法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

    • 但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将 把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

    • **注意:**这是W3C上说的,但是我在试验时,发现返回的数组没有lastIndex的属性,只有四个属性,分别是匹配到的字符串,index, input, 和length

      • 匹配到的字符串,是数组的第0个元素

      • index也就是上边所说写lastIndex

      • input是参与匹配的原文本

      • length表示返回数组的长度

  • test()

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

    • 如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。

    • 等同于reg.exec(string) != null

  • compile() 已废弃

支持正则表达式的 String 对象的方法:

  • search()

    • str.search(reg)

    • 检索与正则表达式相匹配的值,并返回第一个匹配的子串的起始位置

  • match()

    • str.match(reg)

    • 可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配

    • 返回的是存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。

    • **注意:**当全局匹配时,他返回的数组仅仅存的是所有满足匹配的子串,而没有exec()方法返回数组中的那些index, input等属性,注意区分

  • split(separator,howmany)

    • 用于把一个字符串分割成字符串数组, separator是分隔边界,howmany是分割的最大数目

    • 返回一个长度为howmany的数组,把所有满足条件的子串存到数组中,若子串数目小于数组长度,数组空位为空字符串,反之则舍弃超出数组长度的子串

    • 返回的数组中的字串不包括 separator 自身。

  • replace(regexp/substr, replacement)

    • 在字符串中用一些字符替换另一些字符 / 替换一个与正则表达式匹配的子串

    • 返回的一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

    • 第一个参数:

      • 如果传入的正则表达式具有全局标示g,则替换所有匹配的子串,否则只替换第一个匹配到的
    • 第二个参数 replacement:

      • replace可以是字符串,也可以是函数

      • replacement是字符串,则每个匹配到的将被该字符串替代

      • replacement是函数,则匹配到的将被函数的返回值替代

      • **注意:**replacement 中的 $ 字符具有特定的含义,($为所有匹配的子表达式的集合),($n为第n个子表达式的匹配实际内容)

function($, $1, $2)

小demo实例:

  • 1000000 ==> 1.000.000

  • var reg = /(?=(\B)((\d{3})+$))/g

  • 匹配空字符串

posted @ 2017-08-30 17:47  Walker-lyl  阅读(172)  评论(0编辑  收藏  举报