正則斷言太好用了叭!

原文連接:正則斷言前端

什麼是斷言

斷言表達的是一種位置,知足某種匹配模式的一個位置,它包含了先行斷言、後行斷言和條件表達式。這裏主要聊一下先行斷言和後行斷言。vue

正則 名稱 含義
x(?=y) 先行斷言 匹配'x'僅僅當'x'後面跟着'y',這種叫作先行斷言。

例如,/Jack(?=Sprat)/會匹配到'Jack'僅當它後面跟着'Sprat'。
x(?!y) 否認先行斷言 匹配'x'僅當'x' 後面 不跟着'y',這也被稱爲正向否認查找。

例如,/\d+(?!.)/.exec("3.141")匹配‘141’而不是‘3.141’。
(?<=y)x 後行斷言 匹配'x'僅當'x'前面是'y',這種叫作後行斷言。

例如,/(?<=Jack)Sprat/會匹配到' Sprat '僅僅當它前面是' Jack '。
(?<!y)x 否認後行斷言 匹配'x'僅當'x' 前面 不跟着'y',這被稱爲反向否認查找。

例如, /(?<!.)\d+/.exec('3.141')匹配‘3’而不是'141'。

舉例幾個應用場景git

社交應用

  1. @某人
var s = '項目相關各端同窗 @張三 @李四 @王五 記得下班前拆分下各自的任務。';
s.match(/(?<=@).+/g); // output: ["張三", "李四", "王五"]
複製代碼
  1. #話題#
var s = '據央視網報道,#廣州河涌邊現大量紅火蟻#,各位街坊當心留意啦。';
s.match(/(?<=#).+(?=#)/g); // output: ["廣州河涌邊現大量紅火蟻"]
複製代碼
  1. emoji表情
var emoji = [捂臉];
emoji.match(/(?<=\[).+(?=\])/g); // output: ["捂臉"]
複製代碼

markdown語法

  1. 一級標題
var h1 = '#一級標題';
h1.match(/(?<=^#).+/g); // output: ["一級標題"]
複製代碼
  1. 二級標題
var h2 = '##二級標題';
h2.match(/(?<=^#{2}).+/g); // output: ["二級標題"]
複製代碼
  1. 引用
var quoto = '> 勾股定理指指角三角形中兩指角邊的平方和等於斜邊的平方。'
quoto.match(/(?<=\>\s).+/g);  // output: ["勾股定理指指角三角形中兩指角邊的平方和等於斜邊的平方。"]
複製代碼
  1. 匹配行內代碼塊
var inlineCode = '前端主流框架包含:`vue`、`React`與`angular`等,其餘非主流不勝枚舉'
inlineCode.match(/(?<=`)[a-z]+?(?=`)/gi); // output: ["vue", "React", "angular"]
複製代碼

歡迎補充其餘應用場景......github

相關文章
相關標籤/搜索