第8章 使用正则表达式

第8章 使用正则表达式

正则表达式(Regular Expression)是一个描述字符模式的对象,其中字符模式由普通字符(如A~Z、a~z、0~9)和特殊字符(元字符)组成。正则表达式是高效的字符串检索和处理工具,在网页设计中占据重要位置。


JavaScript的RegExp类表示正则表达式,String和RegExp对象都定义了支持正则表达式的方法,后者使正则表达式具备强大的模式匹配和文本检索与替换功能。本章首先介绍用以描述“字符模式”的正则表达式语法,随后介绍使用正则表达式的String和RegExp方法,以及实战开发技巧。


【学习重点】


▲ 定义正则表达式


▲ 熟悉正则表达式基本规则


▲ 熟练使用正则表达式匹配模式


▲ 使用RegExp对象


▲ 灵活使用正则表达式操作字符串


8.1 认识正则表达式


ECMAScript 3.0版本对JavaScript正则表达式进行了标准化。JavaScript 1.2版本实现了ECMAScript 3.0版要求的正则表达式特性的子集,JavaScript 1.5版本实现了完整的标准。


JavaScript正则表达式以Perl正则表达式为基础,其中JavaScript 1.2版本实现了Perl 4版本的正则表达式,JavaScript 1.5版本实现了Perl 5版本的正则表达式的大型子集。


JavaScript不支持Perl正则表达式的语法特征如下:


☑ s(单行模式)和x(扩展语法)标志。


☑ \a、\A、\e、\E、\l、\L、\u、\U、\Q、\z、\Z、\G转义序列。


☑ (?<=正后向声明、(?


☑ (?<#注释。


☑ (?扩展语法。


在正则表达式中,匹配是最基本的行为,它描述了正则表达式的运算结果。使用正则表达式从给定字符串中查找出符合匹配模式的子字符串,也可能会存在多处符合匹配模式的子字符串,这时每一个子字符串就称为一个匹配。


在网页设计中,正则表达式的应用比较广泛,具体说明如下。


☑ 验证字符串。验证给定的字符串或子字符串是否符合指定特征,例如,验证邮件地址、电话号码等用户提交的数据是否合法等。


☑ 查找字符串。从指定的文本中查找符合指定特征的字符串。


☑ 替换字符串。把给定字符串中符合指定特征的子字符串替换为其他字符串。


☑ 提取字符串。从给定的字符串中提取符合指定特征的子字符串。


8.2 定义正则表达式


定义正则表达式的方法包括构造法和直接量,下面分别进行介绍。


8.2.1 构造正则表达式

JavaScript通过内置的RegExp对象实现对正则表达式的支持。RegExp是Regular Expression(规则表达式)短语的简写,它表示正则表达式的意思。


RegExp对象是一个构造函数,该函数可以带一个或两个参数,用来构造正则表达式。第一个参数指定了正则表达式的匹配模式,第二个参数为可选参数,用来修饰或限制匹配模式,即指定执行匹配操作的方式。


【示例1】先看一个简单的示例。





这是一个最简单的正则表达式,匹配模式为一个字符"a",即该正则表达式能够匹配指定字符串中的字符"a"。由于没有修饰词(即没有设置第二个参数),所以这个正则表达式只能够匹配字符串中第一个小写字母a。





上面示例定义的正则表达式仅能够匹配字符串"JavaScript!=JAVA"中下标为1的字符a,后面的字母a将无法被匹配到。


【示例2】如果希望该正则表达式匹配字符串中所有的字母a,且不区分大小写,则可以在第二个参数中增加g和i修饰词。





然后测试:






提示:在正则表达式中,JavaScript主要支持“g”、“i”和“m”3个修饰性字符。具体说明如下。


☑ 字符“g”是global(全局)一词的缩写,即用来指定全局匹配,通俗地说就是正则表达式将在指定字符串范围内执行所有匹配查找,而不是仅仅找到第一个匹配后就立即停止检索。


☑ 字符“i”是case-insensitive(大小写不敏感)短语中insensitive一词的缩写,即执行不区分大小写的匹配,也就是说对于字母大小写视为等同。


☑ 字符“m”是multiline(多行)一词的缩写,即设置匹配模式能够在多行字符串中执行操作。



这3个修饰词分别指定了匹配操作的范围、大小写和多行行为。这些关键词可以自由组合,以字符串的形式传递给Regular()构造函数。


在ECMAScript标准化之前,JavaScript不支持m修饰词,后来才提供支持。另外,JavaScript不支持的修饰词包括x(设置空格匹配问题)、e(设置逆向匹配问题)、s(设置点号匹配问题)等。


【示例3】RegExp()构造函数的第一个参数是一个字符串或者一个正则表达式,该参数构成了正则表达式的匹配主体。如果该参数是一个字符串,则可以是一个符合正则表达式规则的字符串。





在上面示例中,字符串"\b\w"是一个匹配模式,其中反斜杠表示转义序列,双反斜杠表示斜杠本身的意思,而\b又表示单词的边界,\w表示任意ASCII字符,所以上面的正则表达式将匹配字符串"JavaScript JAVA"中每个单词的首字母。


因为无论是字符串直接量,还是正则表达式都使用字符\表示转义序列,所以将正则表达式作为字符串直接量传递给RegExp()构造函数时,必须使用“\”替换所有“\”字符。



提示:当要动态创建一个正则表达式,而不能使用正则表达式直接量的语法来表示时,构造函数RegExp()非常有用。例如,如果检索的字符串是由用户输入的,那么就必须在运行时使用RegExp()构造函数来创建正则表达式。



【示例4】如果RegExp()构造函数的第一个参数是一个正则表达式,则第二个参数可以省略。这时RegExp()构造函数将使用与正则表达式参数相同的匹配模式和修饰词创建一个新的RegExp对象。





可以把正则表达式直接量传递给RegExp()构造函数,对正则表达式进行类型封装。


【示例5】RegExp()可以作为普通函数进行调用。作为普通函数,RegExp()函数的行为与使用new运算符调用构造函数时一样。不过如果函数的参数是正则表达式,那么它仅返回正则表达式,而不再创建一个新的RegExp对象。





8.2.2 正则表达式直接量

JavaScript约定在正则表达式直接量中,双斜杠包含的字符为正则表达式的匹配模式,它是一组特殊的字符串,但是不能够使用引号进行包含。正则表达式的修饰词则跟随在最后一个斜杠的后

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值