正则表达式之环视与位置

环视与位置是正则表达式中的两个比较复杂难懂的概念。但是掌握后,对于正则的使用也会更得心应手,工作中的正则需求也就都能搞定了。

位置

正则表达式中只有匹配两种东西,一种是内容,另一种就是位置。

匹配内容:

/\w+/.exec('hello') // "hello"

\w匹配到的是单词字符,所以\w匹配的是内容。

在知道什么是内容后,那么什么是位置呢?

我们现在低头看看你的键盘的第一排字母按键q、w、e、r,可以看到q与w并不是完全挨在一起的,中间会有一条不算太宽大的缝。这条缝就可以理解成位置。一个 qwer的字符串,其实就是从 tab键到t键中间的所有空间。

缝隙 + q + 缝隙 + w + 缝隙 + e + 缝隙 + r + 缝隙

一些其他匹配位置的常用匹配符

  • ^ 匹配开始的位置
  • $ 匹配结束的位置
  • \b 匹配单词边界
  • \B 匹配非单词边界
  • (?=p)(?!p)(?<=p)?<!p 环视

环视

环视包括以下四种(后两种ES6支持)

  • 正前瞻(positive lookahead)
  • 负前瞻(negative lookahead)
  • 正后顾(positive lookbehind)
  • 负后顾(negative lookbehind)

一些官方的文档或博客上面会使用一些晦涩难懂(正向先行断言,负向先行断言等)的词来翻译以上四种环视。

所有的环视匹配的都是位置。

正前瞻

正前瞻语法为 (?=p),匹配p前面的位置。

const str = 'qwer'
str.replace(/(?=w)/g, 'a') // "qawer"

把 w 前面的位置替换成 a。

负前瞻

负前瞻语法为(?!p),匹配结果是正前瞻的取反,匹配除了p,所有其他字符前面的位置。

const str = 'qwer'
str.replace(/(?!w)/g, 'a') // "aqwaqar"

把除了w的字符前面的位置都替换成a

正后顾

前瞻是往前看,后顾自然就是往后看了。

正后顾语法(?<=p)。匹配p后面的位置。

const str = 'qwer'
str.replace(/(?<=w)/g, 'a') // "qwaer"

w后面的位置替换成a

负后顾

负后顾语法(?<!p)。匹配除了p` 所有其它字符后面的位置。

const str = 'qwer'
str.replace(/(?<!w)/g, 'a') // "qaweara"

除了w的其他字符后面的位置替换成a


以上就是位置与环视的核心内容了,其实把位置理解了,环视理解起来也就很简单了呢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。