JavaScript权威指南读书笔记——第十章 正则表达式

本文介绍了正则表达式的两种定义方式:直接量定义和构造函数定义,并详细解释了字符类、重复、非贪婪重复等概念。同时,文章还列举了用于模式匹配的字符串方法如search(), replace(), match(), split()等的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式的定义

定义正则表达式有两种方式,第一种是使用正则表达式直接量定义,还有一种就是通过正则表达式的构造函数定义。

直接量定义正则

一个正则表达式直接量会在执行到它时转换为一个RegExp对象,ECMAScript 5规定,同一段代码所表示的正则表达式直接量量的每次运算都返回新对象。

//  正则表达式直接量定义
//  格式:"/正则表达式主体/模式"
var reg = /^Java/i; //匹配以"Java"开头的字符串

构造函数定义正则

直接用正则表达式的构造函数(RegExp)定义正则,第一个参数是正则表达式主体,第二个参数可选表示模式

var reg = new RegExp("^Java","i");

正则表达式中的直接量

这里写图片描述

字符类

这里写图片描述

重复

这里写图片描述

非贪婪重复

假设字符串为”aaa”,正则表达式为/a+/,将会全部匹配。现在我们试试非贪婪匹配的版本/a+?/,则只会匹配”a”。

选择、分组和引用

这里写图片描述

指定匹配位置

这里写图片描述

修饰符

这里写图片描述

用于模式匹配的String方法

search()

如果匹配成功返回第一个与之匹配字符串的位置,如果找不到将返回-1。

"JavaScript".search(/script/i);

replace()

第一个参数是正则表达式,第二个参数是替换的字符串。

    var text = "javascript";
    text.replace(/javascript/gi, "JavaScript");

正则表达式会记忆与每个子表达式匹配的文本,如果替换字符串中出现了$加数字,那么repace()将会用于指定的字表达式相匹配的文本来替换着两个字符。

//  用中文引号替换英文引号
text.repace(/"(^")*"/g, '“$1”');

match()

如果正则表达式设置了修饰符g,match()会进行全局检索找到所有与之相匹配的字符串。

var text = "java JavaScript";
text.match(/java/i);            //返回["java", "Java"];

如果没设置修饰符g,match只检索第一个想匹配。但即使match()执行的不是全局索引,它也返回一个数组。第一个元素就是匹配的字符串,余下的元素则是正则表达式中用圆括号括起来的自表达式。

var text = "abcd12345";
text.match(/(\w+)(\d)+/);           //返回["abcd12345", "abcd", "12345"]

split()

var text = "1, 2, 3";
text.split(/\s*,\s*/);                  //返回["1","2","3"]

RegExp对象

RegExp的属性

  • source
  • global
  • ignorecase
  • multiline
  • lastIndex

source是一个只读字符串,包含正则表达式的文本。

global是一个只读布尔值,说明正则表达式是否带有修饰符g

ignorecase是一个只读布尔值,说明正则表达式是否带有修饰符i

multiline是一个只读布尔值,说明正则表达式是否带有修饰符m

lastIndex是一个可读/可写的整数。

RegExp的方法

exec()

exec()总是返回一个匹配结果,并提供关于本次匹配的完整信息。当调用exec()的正则表达式具有修饰符g时,它将会把当前正则表达式的lastIndex属性设置为紧挨着匹配字符串的字符位置。当第二次调用exec()时,它从lastIndex属性所指示的字符开始检索。如果exec()没有发现任何匹配结果,它会将lastIndex重置为0.

var pattern = /Java/g;
var text = "JavaScript is more fun than Java";
var result;
while ((result = pattern.exec(text)) != null){
    alert("Matched '"+result[0]+"'"+" at position "+result.index+"; next search begins at "+pattern.lastIndex);
}

test()
调用test()和调用exec()等价,当exec()的返回值不是null时,test()返回true。当一个全局正则表达式调用方法test()时,它的行为和exec()相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值