JS 正则笔记

示例:C0753.0177.202303300002)

匹配不少于两个点的表达式

let regA = /.*\..*\.(\w+|\d+)/;

regA.test('A1.4322.123')  //true

regA.test('A1.43.22.123')  //true

=============

个人重点记忆:

* : 等价于 {0,}

?  : 等价于 {0,1}

: 等价于 {1,}

.  :点,匹配任意字符

正文部分:

RegExp (Regular Expression)

以下正则表达式等价: ​

var re = new RgExp("\w+"); ​

var re = /\w+/;

正则表达式,RegExp, exec, test, match, matchAll, replace, search, split exec 返回匹配的数据;test返回true或false;   eg: /^A/.test(fruit); 使用正则 /^A/ 选择 不是以‘A’开头的水果

/abc/能且只能匹配 “abc”

[aA] 表示字母 a 或 A

使用特殊字符: /ab*c/ *的意思是前一项出现零次或多次

断言(Assertions)表示一个匹配在某些条件下发生。分为先行、后行和条件表达式。

  • 1.^ 匹配输入的开头。 eg: /^A/ 匹配字符开头的A
  • 2.$ 匹配输入的结束。 eg: /t$/ 匹配以t结尾的
  • 3.\b 匹配一个单词的边界。eg: /\bm/ 匹配m开头的 eg: /oon\b/ 匹配“oon”结尾的
  • 4.\B 匹配非单词边界。 eg: /ye\B/ 匹配 "possibly yesterday"中"ye"

其他断言:(?条件)

  • 1.x(?=y) 先行断言。 x 被 y 跟随时匹配 x。
  • 2.x(?!y) 先行否定断言。 x没有被紧随,匹配x。 eg: /\d+(?!.)/ 数字后面没有跟随小数点时匹配。 对于/\d+(?!.)/.exec(3.141),匹配‘141’而不是‘3’。
  • 3.(?<=y)x 后行断言。 x 跟随 y 的情况下匹配 x。
  • 4.(?<!y)x 后行否定断言。 x 不跟随 y 时匹配 x。 eg: /(?<!-)\d+/.exec(3) ,“3”得到匹配。eg: /(?<!-)\d+/.exec(-3)的结果无匹配,这是由于数字之前有 - 符号。

字符类 区分不同类型的字符,例如区分字母和数字。

  • [a-c] 匹配a,b,c eg: [\w-] 与 [A-Za-z0-9_-] 相同

  • [^a-c] 一个否定或补充的字符类。

  • . 匹配除行终止符之外的任何单个字符。 eg: /.y/ 在“yes make my day”中匹配“my”和“ay”,而不是“yes”

    在字符内,与文字点匹配。

  • \d 匹配任何数字,相当于[0-9]。

  • \D 匹配任何非数字。 eg: /\D/ 或者 /[^0-9]/ 匹配“B2 is the suite number”中的“B”。

  • \w 字母数字字符。相当于 [A-Za-z0-9_]。 匹配拉丁字母中的任何字母数字字符,下划线。

  • \W 匹配非字母数字字符。 相当于 [^A-Za-z0-9_]

  • \s 匹配单个空白字符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。相当于 [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。例如,/\s\w*/ 匹配“foo bar”中的“bar”。

  • \S 匹配除空格以外的单个字符。

  • \t,\r, \n, \v, \f, [\b] 分别匹配水平制表符,回车符,换行符,垂直制表符,换页符,退格键。

  • ...

  • \ 指示应特殊处理或“转义”后面的字符。它表现为两种方式之一。 通常按字面处理的字符。eg: /b/ 匹配字符“b”。通过在“b”前面放置反斜杠,即使用 /\b/,字符变得特殊以表示匹配单词边界。 通常被特殊对待的字符。eg: /a*/ 示匹配 0 个或多个“a”。 eg:/a\*/ 匹配“a*”。 备注: 搜索\的时候需转义,写成 /\\/。

  • x|y 匹配x或y。eg: /green|red/ 匹配“green apple”中的“green”和“red apple”中的“red”。 备注:析取是指定“一组选择”的另一种方式,但它不是字符类。eg: [abc] 在功能上等同于 (?:a|b|c)

组和范围 区分

字符集 含义
x|y

匹配 "x" 或 "y" 任意一个字符。例如, /green|red/ 在 "green apple" 里匹配 "green",且在 "red apple" 里匹配 "red" 。

[xyz]
[a-c]

字符集。 匹配任何一个包含的字符。您可以使用连字符来指定字符范围,但如果连字符显示为方括号中的第一个或最后一个字符,则它将被视为作为普通字符包含在字符集中的文字连字符。也可以在字符集中包含字符类。

例如,[abcd] 是与[a-d].一样的,它们会 在"brisket" 中匹配 "b",在 "chop" 中匹配 "c" .

例如,[abcd-] 和[-abcd] 将会在 "brisket" 匹配 "b" , 在 "chop" 匹配 "c" , 并且匹配 "non-profit" 中的 "-" (连字符)

例如,[\w-] 是字符集 \w 和 “-”(连字符)的并集,与这种写法一样: [A-Za-z0-9_-].。他们都会 在 "brisket"中匹配“b”, 在 "chop"中匹配“c”, 在 "non-profit" 中匹配 "n"。

[^xyz]
[^a-c]

一个否定的或被补充的字符集。也就是说,它匹配任何没有包含在括号中的字符。可以通过使用连字符来指定字符范围,但是如果连字符作为方括号中的第一个或最后一个字符出现,那么它将被视为作为普通字符包含在字符集中。例如,[^abc] 和 [^a-c] 一样。它们最初匹配“bacon”中的“o”和“chop”中的“h”。

备注: ^ 字符也可以表示 输入的起始

(x)

捕获组:匹配 x 并记住匹配项。例如,/(foo)/匹配并记住“foo bar”中的“foo”

正则表达式可以有多个捕获组。结果,匹配通常在数组中捕获的组,该数组的成员与捕获组中左括号的顺序相同。这通常只是捕获组本身的顺序。当捕获组被嵌套时,这一点非常重要。使用结果元素的索引 ([1], ..., [n]) 或从预定义的 RegExp 对象的属性 ($1, ..., $9).

捕获组会带来性能损失。如果不需要收回匹配的子字符串,请选择非捕获括号 (见下面)。

String.match() 不会返回组,如果设置了 /.../g 标志。但是,您仍然可以使用 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值