【JavaScript】-- 正则表达式(一)

本文详细介绍了正则表达式的创建方法,包括字面量和构造函数两种方式,并讲解了正则的使用,如exec方法和test方法。同时,阐述了正则表达式的关键属性如lastIndex,以及各种模式修饰符如g、i、m。此外,还涵盖了正则表达式的基本语法,如字符集、边界符和数量词等。通过实例展示了如何在JavaScript中进行正则匹配和检测。
摘要由CSDN通过智能技术生成

正则表达式的创建

字面量创建

// 字面量形式创建
// var reg = /条件/匹配模式 
// 匹配模式有 g i m 三种
// g 全局匹配  i 忽视大小写  m 多行匹配
// 条件写在两个斜线之间
var reg1 = /hello/g

构造函数创建

// 构造函数创建
// var reg = new RegExp('正则表达式','匹配模式');
var reg2 = new RegExp('hello','g');

使用方法:

  • 使用exec方法检测,检测之后返回一个数组,里面是对应的匹配字段和对应索引,不满足条件就返回null:

    [匹配的内容,index: 在str中匹配的起始位置,input: 参数字符串,groups: undefined]

 如果是全局模式的正则验证 还可以使用循环进行输出 :(前提是开启全局匹配模式)

// 如果是全局模式的正则验证 还可以使用循环进行输出
while(true)
	var result = reg.exec(str);
	if(!result){
		break;
	}
	console.log(result[0],result["index"],reg.lastIndex);
}

注意点:

1)如果正则表达式中有修饰符"g",这时,在正则表达式的实例reg中会维护lastIndex属性,记录下一次开始的位置,当第二次执行exec的时候,从lastIndex开始检索。

2)如果正则表达式中没有修饰符"g",不会维护lastIndex属性,每次执行从开始位置检索

  • 使用 test方法检测, 满足条件返回true 不满足返回false

tostring / toLocaleString ()

value() 

var reg2 = new RegExp('hello','g');
console.log(reg2.toString());  // 把正则表达式的内容转化成**字面量形式字符串**/有本地特色的字符串(**JS中没效果**)
console.log(reg2.valueOf());  // 返回正则表达式本身

正则表达式实例属性

  • lastIndex()-- 没有开启全局匹配是该属性值一直为0

设置了全局匹配时,每执行一次exec/test来匹配,lastIndex就会移向匹配到的字符串的下一个位置,当指向的位置后没有可以再次匹配的字符串时,下一次执行exec返回null,test执行返回false,然后lastIndex归零,从字符串的开头重新匹配一轮

可以理解成,每次正则查找的起点就是lastIndex

var str = 'hello html hello css hello js'
// 没有开启全局匹配
// 没有lastIndex这个属性,每次匹配完都从头开始
var reg1 = /hello/
// 开启全局匹配
var reg2 = /hello/g
console.log(reg1.lastIndex);  // 0
console.log(reg1.exec(str));
console.log(reg1.lastIndex);  // 0

console.log(reg2.lastIndex);  // 0
console.log(reg2.exec(str));
console.log(reg2.lastIndex);  // 5

console.log(reg2.lastIndex);  // 5
console.log(reg2.exec(str));
console.log(reg2.lastIndex);  // 16
  • ignoreCase、global、multiline

判断正则表达式中是否有忽略大小写、全局匹配、多行匹配三个模式修饰符

var reg1 = /hello/igm;
console.log(reg1.ignoreCase); //true
console.log(reg1.global); //true
console.log(reg1.multiline);  //true
  • source

返回字面量形式的正则表达式(类似于toString

var reg1 = /hello/igm;
console.log(reg1.source); //hello

正则表达式语法-元字符

  • 直接量字符

正则表达式中的所有字母和数字都是按照字面含义进行匹配的,Javascript正则表达式语法也支持非字母的字符匹配,这些字符需要通过反斜线\作为前缀进行转义。

  • 字符集合

一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符‘-’指定一个范围

方括号用于查找某个范围内的字符:

  1. [abc] 查找方括号之间的任何字符
  2. [0-9] 查找任何从0至9的数字
  3. [^xyz] 一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 '-' 指定一个范围内的字符。

注意:^写在[]里面是反义字符组

  • 边界符

 ^ 匹配输入开始:匹配句首文本, 表示以谁开始;如果是多行模式则匹配一个断行符后的开始处

$ 匹配输入结尾:匹配句尾文本,表示以谁结束;如果是多行模式则匹配一个断行符前的结尾处

// ^ 匹配输入开始:匹配句首文本
// 表示以谁开始;如果是多行模式则匹配一个断行符后的开始处
var reg = /^abc/;  //必须以abc开头才满足
console.log(reg.test('abc')); // true
console.log(reg.test('abcd')); // true
console.log(reg.test('aaabc')); // false
// $ 匹配输入结尾:匹配句尾文本
// 表示以谁结束;如果是多行模式则匹配一个断行符前的结尾处
var reg = /abc$/;  //必须以abc结尾才满足
console.log(reg.test('abc')); // true
console.log(reg.test('ddabc')); // true
console.log(reg.test('aaabc')); // false

 若 ^ 与 $ 在一起表示精确匹配: 

var reg = /^abc$/;  //必须是abc字符串才满足

console.log(reg.test('abc')); // true

console.log(reg.test('abcd')); // false

console.log(reg.test('aaabc')); // false

var reg = /^[a-z]$/;  // 26个字母任何一个都满足
console.log(reg.test('a')); // true
console.log(reg.test('b')); // true
console.log(reg.test('n')); // true
console.log(reg.test('A')); // false

//字符组合
// 26个英文字母(大写和小写都可以)任何一个字母返回 true
var reg1 = /^[a-zA-Z0-9]$/;
console.log(reg.test('a')); // true
console.log(reg.test('8')); // true
console.log(reg.test('Y')); // true

取反 在中括号里加上^ 表示取反,只要包含中括号里的任何一个字符都返回false

// 取反 在中括号里加上^ 表示取反,只要包含中括号里的任何一个字符都返回false
var reg1 = /^[^a-zA-Z0-9]$/;
console.log(reg.test('a')); // false
console.log(reg.test('8')); // false
console.log(reg.test('Y')); // false
console.log(reg.test('!')); // true
  • 字符类 

将直接量字符单独放进方括号内就组成了字符类,一个字符类可以匹配它所包含的任意字符。例如:/[abc]/ 就和字母"a"、"b"、"c"中的任意一个都匹配。"^"符号用来定义否定字符类,例如:/[^abc]/ 匹配的是"a"、"b"、"c"之外的所有字符。字符类可以使用连字符来表示字符范围,例如:/[a-z]/,要匹配拉丁字母表中任何字母和数字,[a-zA-Z0-9]

可以结合英文原意记忆:

d ==> digit(数字)

s ==> space(空白)

w ==> word(单词)

  • 数量词

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值