前言 正則表達式的用途很多,特別是在查找替換,文本處理,爬蟲項目中應用更是很多:
- 復雜的字符串搜尋、替換工作,無法用簡單的方式(類似借助標准庫函數)達成。
- 能夠幫助你進行各種字符串驗證。
- 不止應用於編程語言中:
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(); }
在這里,使用了回溯引用替換,$& 代表匹配的字符串
結束語
稍微總結了一些關於回溯引用的使用,關於正則表達式的內容還有很多,如果有什么錯誤的地方,希望大家可以不吝賜教,謝謝,祝大家開開心心~