正則表達式 之 回溯引用:前后一致匹配


 前言  正則表達式的用途很多,特別是在查找替換,文本處理,爬蟲項目中應用更是很多:

  • 復雜的字符串搜尋、替換工作,無法用簡單的方式(類似借助標准庫函數)達成。
  • 能夠幫助你進行各種字符串驗證。
  • 不止應用於編程語言中:JavaScript、JAVA、Perl、PHP、C#...
  • 也應用於許多操作系統的主流指令中:Linux/Unix、Mac、Windows PowerScript

由於正則表達式的流派很多,且關於JavaScript中的正則表達式的具體使用可以參照 MDN參考手冊 或者這篇 博文 《玩轉JavaScript正則表達式,而我此篇文章講述的主要關於 回溯引用,主要是參考 《正則表達式必知必會》一書。

 

介紹

     先說點基本語法,正則表達式的創建方式如下兩種,直接使用對象字面量(推薦)或者使用RegExp構造函數創建:

var pattern1 = /aabb/;
var pattern2 = new RegExp('aabb');

我們來看一個情形,在一篇HTML文檔中,我們要匹配所有 標題標簽(<h1>-<h6>以及其結束標簽)

var sentence=`<h1><wbr>正則表達式</h1>
        Content is divided into two sections;
        <h2>subTitle</h2>
        another line`
var re = /<[hH][1-6]>.*?<\/[hH][1-6]>/g;
console.log(sentence.match(re));

我們使用如上正則表達式,看起來似乎是對的,但是我們來看看這個例子

var sentence =`<h1><wbr>正則表達式</h1>
      Content is divided into two sections;
      <h2>subTitle</h3>
      another line`

這樣子並不合法,所以我們要做的便是利用回溯引用來解決這個問題

 

回溯引用匹配 · 基本知識點

    1.(x) 匹配 'x' 並且記住匹配項。括號被稱為 捕獲括號

    2. 回溯引用只能引用子表達式(即捕獲括號()括起的正則表達式片段)

    3.  \   用於標識回溯引用, \1 對應第1個子表達式,\2 對應第2個子表達式,以此類推,\0對應整個正則表達式。

(但是在替換操作中,必須使用$代替\)

  看了這些知識點,還是來點例子,容易記一些~

 1.我們繼續看看上面那個例子,如果換成下面的正在表達式

var re = /<[hH]([1-6])>.*?<\/[hH]\1>/g;

這一次總算是正確了

3. 再看freecodeCamp上的一道題,原題鏈接 :here

Convert a string to spinal case. Spinal case is all-lowercase-words-joined-by-dashes.

比如: spinalCase("AllThe-small Things") should return "all-the-small-things" 

function spinalCase(str) {
  // "It's such a fine line between stupid, and clever."
  // --David St. Hubbins
  str = str.replace(/[^a-zA-Z]/g, '-')
    .replace(/\B[A-Z]\B/g, '-$&');
  return str.toLowerCase();
}

在這里,使用了回溯引用替換,$& 代表匹配的字符串

 

結束語

  稍微總結了一些關於回溯引用的使用,關於正則表達式的內容還有很多,如果有什么錯誤的地方,希望大家可以不吝賜教,謝謝,祝大家開開心心~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM