JavaScript:正则表达式(7)

本文深入探讨了正则表达式中的锚定技术,包括如何使用特殊字符如^、$、和B来精确匹配字符串中的特定位置。通过实例分析,解释了这些锚定元素的作用和应用,并介绍了前向声明、反前向声明以及如何利用它们来实现更灵活的匹配模式。

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

⑦ 指定匹配的位置

正如前面所介绍的,正则表达式中的多个元素才能够匹配字符串中的一个字符。例如,\s匹配的只是一个空白符。还有一些正则表达式的元素匹配的是字符之间的位置,而不是实际字符。例如\b匹配的是一个单字的边界,即位于\w(ASCII单字字符)字符和\W(非单字字符)之间的边界,或位于一个ASCII单字字符与一个字符串的开头或结尾之间的边界。像\b这样的元素不指定匹配的字符串中使用的字符,它们指定的是匹配所发生的合法位置。有时我们称这些元素为正则表达式的锚,因为它们将模式定位在检索字符串中的一个特定位置上。最常用的锚元素是^,它使模式定位在字符串的开头,而锚元素$则使模式定位在字符串的末尾。

例如,要匹配单字“JavaScript”,可以使用正则表达式/^JavaScript$/。如果想检索“Java”这个单字自身(不像在“JavaScript”中那样作为前缀),可以使用模式/\sJava\s/,它要求在单字Java之前和之后都要有空格。但是这样做有两个问题:

⑴ 如果“Java”出现在一个字符串的开头或结尾,该模式就不会与之匹配,除非在开头处或者结尾处有一个空格。

⑵ 当这个模式找到了一个与之匹配的字符串时,它返回的匹配字符串的前端和后端都有空格,这并不是我们想要的。

因此我们使用单字的边界\b来代替真正的空格符\s进行匹配。结果表达式是/\bJava\b/。

元素\B将把匹配锚定在不是单字边界的位置。因此,模式/\B[Ss]cript/与“JavaScript”和“postscript”匹配,但是不与“script”和“Scripting”匹配。

在JavaScript 1.5中,还可以使用任意的正则表达式作为锚定条件。如果在符号“(?=”和“)”之间加入一个表达式,它就是一个前向声明,指定接下来的字符必须被匹配,但并不真正进行匹配。例如要匹配一种常用的程序设计语言的名字,但只在其后有冒号时匹配,可以使用/[Jj]ava([Ss]cript)?(?=\:)/。这个模式与“JavaScript:The Definitive Guide”中的单字“JavaScript”匹配,但是与“Java in a Nutshell”中的“Java”不匹配,因为其后没有冒号。

如果用“(?!”引入声明,它将是反前向声明,指定接下来的字符都不必匹配。例如/Java(?!Script) ([A-Z]\w*)/匹配的是“Java”后跟随一个大写字母和任意多个ASCII单字字符,但是不能跟随“Script”。它与“JavaBeans”匹配,不与“Javanese”匹配,与“JavaScrip”匹配,但不与“JavaScript”或“JavaScripter”匹配。

下表总结了正则表达式的锚:

正则表达式的锚字符
字符含义
 ^匹配字符串的开头,在多行检索中,匹配一行的开头
 $匹配字符串的结尾,在多行检索中,匹配一行的结尾
 \b匹配一个词语的边界。简而言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或结尾之间的位置
 \B匹配非词语边界的位置
 (?=p)正前向声明,要求接下来的字符都与模式p匹配,但是不包括匹配中的那些字符。
 (?!p)反前向声明,要求接下来的字符不与模式p匹配


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值