JavaScript:正则表达式(7)

⑦ 指定匹配的位置

正如前面所介绍的,正则表达式中的多个元素才能够匹配字符串中的一个字符。例如,\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匹配


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript 中的正则表达式是一种特殊的字符串,用于匹配搜索或替换文本中的模式。它们可以使用字符串的 match() 和 replace() 方法,以及 RegExp 对象的 exec() 和 test() 方法来执行。正则表达式通常使用两个斜杠 (//) 来定义,其中包含要匹配的模式。 ### 回答2: 正则表达式是一种用来描述匹配某个文本模式的字符串的表达式语言。在JavaScript中,正则表达式也是一个对象。使用正则表达式可以完成字符串的匹配、查找、替换等操作。 正则表达式的基本语法包括两个部分:字符集和限定符。字符集用来描述匹配的字符范围,限定符则表示字符集中字符的数量和位置。 字符集可以包括以下几种元素: 1. 普通字符串:匹配与该字符串完全相等的文本。 2. 元字符:用来描述某个特定的字符类型,如\d表示数字字符,\w表示字母或数字字符,\s表示空白字符等。 3. 字符集合:用来描述一组特定的字符,如[abc]表示匹配a、b或c中的任意一个字符。 4. 范围:用来描述一个字符的范围,如[a-z]表示匹配任意一个小写字母。 5. 量词:用来描述某个字符或字符集合出现的次数,如+表示至少出现一次,*表示任意次,?表示最多一次。 6. 分组:用()将一些字符组合在一起,方便后面的限定符对其进行操作。 正则表达式的应用非常广泛,如验证输入的表单是否符合要求、从一段文本中提取特定的信息等。同时也需要注意正则表达式的性能问题,过于复杂的正则表达式可能会导致程序运行缓慢甚至崩溃。因此,在编写正则表达式时,需要尽量简单明了,以便提高程序的性能。 总之,对于JavaScript程序员来说,熟练掌握正则表达式是非常重要的一项基本技能。在实际应用中,不断练习和实践才能更好地掌握和运用它。 ### 回答3: 正则表达式是一种强大的文本处理工具,它可以用于匹配、查找和替换文本中的模式。在JavaScript中,正则表达式是以RegExp对象的形式表示的。 RegExp对象可以通过字面量或构造函数的形式创建。例如,使用字面量创建一个正则表达式对象: ``` var regex = /pattern/; ``` 其中,pattern是要匹配的模式。正则表达式的模式可以包含字面字符、元字符、字符类和分组等元素。 另一种创建RegExp对象的方式是使用构造函数: ``` var regex = new RegExp('pattern'); ``` 在创建RegExp对象时,可以指定标志参数来修改匹配行为。常用的标志参数有: - g:全局匹配,即匹配所有符合模式的字符而不仅仅是第一个匹配项。 - i:不区分大小写匹配。 - m:多行匹配,即启用^和$两个元字符匹配每一行的开头和结尾。 例如,创建一个不区分大小写全局匹配的正则表达式对象: ``` var regex = /pattern/gi; ``` 通过正则表达式对象的test()方法可以判断一个字符串是否符合模式。例如: ``` var string = 'hello world'; var regex = /hello/; console.log(regex.test(string)); // true ``` 对于包含多个匹配项的情况,可以使用exec()方法返回匹配的结果数组。例如: ``` var string = 'hello world'; var regex = /l/g; var match; while ((match = regex.exec(string)) !== null) { console.log(match[0], match.index); } // Output: l 2 // l 3 // l 9 ``` 正则表达式还可以用于替换文本。通过字符串的replace()方法,可以使用正则表达式匹配并替换字符串中的内容。例如: ``` var string = 'hello world'; var regex = /world/; console.log(string.replace(regex, 'kitty')); // hello kitty ``` 需要注意的是,正则表达式在处理特殊字符时可能会出现转义问题。因此,需要在正则表达式中对特殊字符进行转义。例如: ``` var string = 'hello.world'; var regex = /hello\.world/; console.log(regex.test(string)); // true ``` 总之,正则表达式JavaScript中一个非常重要的概念,对于文本处理和数据分析等方面都有着广泛的应用。掌握正则表达式的基本语法和应用,对于JavaScript开发者来说是一项必备技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值