正则表达式及其语法

正则表达式的声明

  1. 使用字面量形式
var patt = /正则表达式/修饰符;
var patt = /a/gi;
  1. 使用new关键字声明; 参数都是字符串
var patt = new RegExp(正则表达式, 修饰符)

参数解析:

  • 正则表达式:由一些具有特殊的含义的字符组成
  • 修饰符: g 全局匹配i 不区分大小; m 多行匹配
  1. 两种声明方式的区别
  • 字面量形式不能使用变量存储正则表达式, 但是使用new 关键字可以使用变量存储正则表达式

正则表达式的语法

正则的组成: 正则表达式由 元字符,字符类,量词组成

元字符
  1. ^ : 以什么作为开头
  2. $ : 以什么作为结束
  3. . : 除空白符以外的任意一个字符
  4. [] : 匹配在[]范围内任意一个字符
  5. [^] : 除了[]范围内的任意一个字符
字符类
  1. [a-z] : 匹配小写字母 a 到 z
  2. [A-Z] :匹配大写字母 a 到 z
  3. [0-9] : 匹配的是数字
  4. \w : 匹配 下划线, 小写字母 a 到 z,大写字母 A 到 Z;数字0-9; 等价形式[a-zA-Z0-9_]
  5. \W :匹配的是 除了上边以外的所有字符; 等价形式[^a-zA-Z0-9_]
  6. \d : 匹配的是数字 ,等价形式 [0-9]
  7. \D : 匹配的是除了数字以外的字符
  8. \s : 匹配的是空白符
  9. \S : 匹配除了空白符以外的字符
量词
  1. *: 匹配0次或者多次
  2. +:匹配1次或者多次
  3. ?: 匹配0次或者1次
  4. {n} : 匹配n次
  5. {n,} : 至少匹配n次, 最多没限制
  6. {n,m} : 至少匹配n次,最多匹配m次
匹配模式
  1. 贪婪模式 : 尽可能多的匹配 ; + * {n,} {n,m}
  2. 惰性模式 : 尽可能少的匹配 ; +? *? {n,}? {n,m}?
候选 |
var patt = /red|blue/;
分组 ()
var patt = /(kid){3}/  // kid 作为整体进行匹配三次
var patt = /kid{3}/  // d匹配三次
反向引用 ()

反向引用引用的是匹配的结果,不是匹配规则

// var res = /(['"])[^\1]*\1/.test('\"Tom\"');
var res = /(['"])[^\1]*\1/.test('\"Tom\'');
console.log(res)

反向引用 $1 或者是 \1 :数字是左括号的顺序

var str = "todayhelloworldTom";
var patt = /(today)(hello(world(Tom)))/g;
var res = patt.test(str);
var val1 = RegExp.$1;  //  todayhelloworldTom
var val2 = RegExp.$2  // helloworldTom
var val3 = RegExp.$3  // worldTom
var val4 = RegExp.$4  // Tom
console.log(val1, val2, val3, val4)
只分组,不引用 ?:

有时只需要分组,不需要进行反向引用,使用(?:)可以解决

var patt = /(hello(?:world))/;
正向前瞻 和 负向前瞻
  1. 正向前瞻 exp1(?=exp2) :exp1表达式的后边只能是exp2代表的表达式才能匹配成功
var patt = /hello(?=wolrd)/;
  1. 负向前瞻 exp1(?!exp2) : exp1表达式的后边只要不是exp2代表的表达式就匹配成功
var patt = /hello(?!wolrd)/;

字符串中和正则相关的方法

  1. match(patt) : 找到一个或者多个匹配; 结果是一个数组,如果没有使用全局匹配修饰符g, 结果只有一个, 找到的是第一个匹配的值; 如果使用的g, 则结果有多个
var Str = '123542435346467333';
// var res = Str.match(/\d{3,5}?/g);
var res = Str.match(/\d{3,5}?/);
console.log(res)
// 没有使用修饰符g: 
["123", index: 0, input: "123542435346467333", groups: undefined]
0: "123"
groups: undefined
index: 0
input: "123542435346467333"
length: 1
__proto__: Array(0)

// 使用修饰符 g
["123", "542", "435", "346", "467", "333"]
  1. repalce(patt, newStr) : 替换于正则表达匹配的字符串
  2. search(patt) : 检索是否存在和正则表达式匹配的字符; 存在的返回值为第一次匹配位置的索引值; 如果不存在,返回值为 -1 ; 不能识别全局修饰符 g; 但是可以识别修饰符 i;

正则对象的方法

  1. test() : 判断字符串是否符合正则规则, 结果是布尔值, true: 符合规则, false: 不符合规则
  2. exec() : 检索字符串中是否存在符合正则规则的子串,结果是数组, 每执行一次exec()方法,都会得到一个结果; 因为RexExp对象的 lastIndex 属性 记录每一次匹配位置的索引值; 下次匹配从lastIndex记录的位置开始
    因此,检索所有的结果, 需要借助循环
var str = '12342354324534456345';
var patt = /\d{3,5}/g;
var res ;
while(res =  patt.exec(str)){
    console.log(res);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值