Js 正则表达式入门笔记

正则表达式进阶

一、正则表达式入门

前言了解 - JavaScript test()方法

  • 定义和用法

test() 方法用于检测一个字符串是否匹配某个模式。如果字符串中有匹配的值返回 true ,否则返回 false。

  • 语法
RegExpObject.test(string)

string 必需。要检测的字符串

1.1 字符类

[] 匹配集合中的任何字符

一、[Jj]既可以匹配大写的J也可以匹配小写的j
var reg = /[Jj]avaScript/;
console.log(reg.test('JavaScript')); // 输出 true  
console.log(reg.test('javaScript')); // 输入 true

console.log(reg.test('TavaScript')); // 输入 false
二、 [abcde]匹配中括号内的任意一个字母
var reg = /[abcde]/;
console.log(reg.test('abondon')); // 输入 true

console.log(reg.test('fhij')); // 输出 false
三、 [0-9] 匹配任何数字。类似于 [0123456789]。连字符-代表区间
var reg = /[0-9]/;
console.log(reg.test(454512)); // 输出 true

console.log(reg.test('asfADA#@#')); // 输出 false

补充:

  1. \d 匹配任意数字 (0-9). 等价于 [0-9],简而言之,\d === [0-9]
var reg = /\d/;
console.log(reg.test(454512)); // 输出 true

console.log(reg.test('asfADA#@#')); // 输出 false
四、 同样的[a-z],表示字母a-z的区间
var reg = /[a-z]/;
console.log(reg.test('asfADA#@#')); // 输出 true

console.log(reg.test(454512));// 输出 false

补充:

  1. [a-zA-Z0-9_]同样也是如此,表示a-z、A-Z、0-9的区间,最后的_是下划线。案例见 2

  2. \w 匹配字母、数字、下划线。 只匹配小ASCII码的字符(无声调字母或非罗马英文字符)。 等价于上述的 [A-Za-z0-9_]

var reg = /\w/; /* /\w/ === /[a-zA-Z0-9_]/  */
console.log(reg.test('asfADA_01')); // 输出 true
console.log(reg.test(454512)); // 输出 true

console.log(reg.test('#$%#$^')); // 输出 false
五、 [^abc] 匹配不在集合中的任何字符。则匹配除了abc外的字符
var reg = /[^abc]/;
  console.log(reg.test('d')); // 输出 true

  console.log(reg.test('ab')); // 输出 false

补充:

  1. [^0-9] 匹配除了数字外的字符。
var reg = /[^0-9]/;
console.log(reg.test('d')); // 输出 true

console.log(reg.test(123)); // 输出 false
  1. ^ 若不在集合[],则表示匹配字符串开头,或者当使用多行标志(m)时,匹配一行的开头。 这个会匹配到位置,而不是字符。
var reg = /^dd/;
console.log(reg.test('dd123')); // 输出 true,因其以dd开头

console.log(reg.test('da123')); // 输出 false
  1. 既然又开头^,那必然有结尾。 $ 匹配字符串结尾,或者当使用多行标志(m)时,匹配一行的结尾。 这个会匹配到位置,而不是字符。
var reg = /123$/;
console.log(reg.test('1dd123')); // 输出 true,因其以123结尾

console.log(reg.test('abc321')); // 输出false

var reg = /^12$/; // 若 ^ 和 $ 都加上去,则是开头要12,结尾要12 相当于等于12,没什么意义
console.log(reg.test('12')); // 输出true

console.log(reg.test('1212'));// 输出false
  1. 有人可能想到[^0-9] ,因为[0-9] 等价于 \d,所以[^0-9] 会不会等价于 ^/d答案是不会^/d则表示以数字开头的字符串。
var reg = /^\d/;
console.log(reg.test('1dd123'));// 输出true,因其以数字开头

console.log(reg.test('abc'));// 输出false
六、\W\w的取反,\D\d的取反

这里在写一次两者区别

  • \W 匹配非字母、数字、下划线。 等价于 [^A-Za-z0-9_]

  • \w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]

  • \D 匹配任意非数字字符 (0-9). 等价于 [^0-9]

  • \d 匹配任意数字 (0-9). 等价于 [0-9]``

七、 . 匹配除换行符 \n 之外的任何字符,只能出现在方括号以外。 等价于 [^\n\r]。要匹配包括 \n 在内的任何字符,请使用象 [.\n] 的模式
var reg = /ar.r./;
console.log(reg.test('ar#rd')); // 输出 true
console.log(reg.test('ar2rA')); // 输出 true

  console.log(reg.test('ar2r')); // 输出 false,因其缺失一个字符
八、 \s 匹配任何空白字符。(空格, 制表符, 换行符);\S 匹配任何非空白字符。(空格, 制表符, 换行符)
var reg = /ar\sr\s/;
console.log(reg.test('ar r\t'));  // 输出 true
console.log(reg.test('ar\tr\n')); // 输出 true

console.log(reg.test('ar2rr')); // 输出 false


var reg = /ar\Sr\S/;
console.log(reg.test('ar r\t'));  // 输出 false
console.log(reg.test('ar\tr\n')); // 输出 false

console.log(reg.test('ar2rr')); // 输出 true

1.2 锚定 - 他匹配位置,而不是字符。

一、 ^& 开头和结尾,详细见上文的补充
二、 \b 词边界。匹配一个单词边界,也就是指单词和空格间的位置
var reg = /b\s/;
console.log(reg.test('ab sb dasb')); // 输出true,因此空格后的边界都是b
console.log(reg.test('abd sbd dasbd')); // 输出 false

var reg = /\scode\s/;
console.log(reg.test(' code ')); // 输出 true,因为前后都是空格后 为code
console.log(reg.test('code')); // 输出 false
console.log(reg.test('abdb sbcodedb dasbd')); // 输出false

三、\B 则为非词边界。匹配非单词边界。

1.3 转义字符 - 这里只介绍保留字符 \

以下字符含有特殊含义, 应该以\(反斜杠)为开头,以表示文字字符:

+*?^$\.[]{}()|/

在一个字符集中, 只有 \, -, 和 ] 需要被转义

var reg = /\([0-9\-]{5}\)/; // 这里 () 与 - 都是转义的
console.log(reg.test('(12345)')); // 输出 true
console.log(reg.test('(1234-)')); // 输出 true
console.log(reg.test('(1234-')); // 输出 false

补充:

  1. {1, 3} 量词。匹配指定数量个前面的标记。

    • {1,3} 会匹配1个到3个。
    • {3} 会匹配正好3个。
    • {3,} 会匹配3个或更多。而 + 等价于{1, } * 等价于 {0, }
  2. + 匹配1个或更多前面的标记

var reg = /z[1-9]+/;
console.log(reg.test('z1')); // 输出 true,+ 匹配前面的[1-9]标记,向后匹配{1, }个字符
console.log(reg.test('z2')); // 输出 true

console.log(reg.test('z')); // 输出false,后没有出现字符可匹配
  1. * 匹配0个或更多前面的标记。
var reg = /z[1-9]*/;
console.log(reg.test('z1')); // 输出 true
console.log(reg.test('z2')); // 输出 true
console.log(reg.test('z')); // 输出 true,向后匹配0个或更多个,所以为true,不同于 +

1.4 量词 & 多选

量词指定了前面的标记需要出现的次数。默认情况下,量词是贪婪的,会尽可能多地匹配字符。

什么是贪婪模式呢?正则表达式默认是贪婪模式,/\d{3,4}/这里既可以匹配3个数字也可以匹配4个数字,但优先匹配的是4个数字

怎么使用非贪婪模式,在表达式末尾加上?即可

一、 ? 匹配一个字符零次或一次,另一个作用是非贪婪模式
  • 匹配0个或1个前面的标记,用于标为可选项。
var reg = /abcde?/;
console.log(reg.test('abcd'));  // 输出 true
console.log(reg.test('abcde')); // 输出 true
console.log(reg.test('abcdf')); // 输出 true
  • 令前面的标记变慵懒,让其尽可能少地匹配字符。默认情况下,量词是贪婪的会尽可能多地匹配字符。
var reg = /\d{3,4}/;
console.log(reg.test('1234')); // 输出 true
console.log(reg.test('123')); // 输出 true,优先匹配四个,不代表不匹配三个
console.log(reg.test('12dd')); // 输出 false

var reg = /\d{3,4}?/;
console.log(reg.test('123')); // 输出 true
console.log(reg.test('123d')); // 输出 true,非贪婪模式,只匹配前三个
二 、+ , * , {1,3} 见上方补充
三、 | 多选表现起来像 逻辑与。匹配|前面的或后面的表达式。

它可以用在分组里面,或在整个表达式中使用。会按顺序尝试匹配。

var reg = /b(a|e|i)d/;
console.log(reg.test('bad')); // 输出 true
console.log(reg.test('bed')); // 输出 true

console.log(reg.test('bod')); // 输出 false

补充:

  • / 表达式 /g g为全局搜索

    1. 保留上次匹配结果的位置,允许子序列从上次匹配的结果继续搜索。
    2. 如果没有全局(g)标识, 后面的查询会返回相同的结果。
  • / 表达式 /i i为忽略大小写

    1. 让整个表达式对大小写不敏感。 例如,/aBc/i 会匹配到 AbC

二、入门小练习

2.1 匹配手机号(11位)

/1[345789]\d{9}/

  • 必须是11位的数字
  • 第一位数字必须以1开头,第二位数字可以是[3,4,5,7,8,9]中的任意一个,后面9个数是[0-9]中的任意一个数字。

仅为学习所做笔记,如果不足或错误之处,请指出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

News777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值