美文网首页
正则表达式之环视与位置

正则表达式之环视与位置

作者: 小绿帽特攻队 | 来源:发表于2019-02-24 13:10 被阅读1次

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

    位置

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

    匹配内容:

    /\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


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

    相关文章

      网友评论

          本文标题:正则表达式之环视与位置

          本文链接:https://www.haomeiwen.com/subject/glumyqtx.html