1. 程式人生 > >正則表示式的先行斷言、後行斷言

正則表示式的先行斷言、後行斷言

實際開發中經常會遇到這樣的情況,需要在一組字串中取出指定的字元,例如:

取出如下一段程式碼裡和html標籤

<div><h2>title</h2><p>content</p></div>

理想的結果是:['div', 'h2', 'p']

經觀察目前字串的特點是:前置有:<、後置有:>,這個時候就能用到先行斷言和後行斷言,直接給出程式碼:

'<div><h2>title</h2><p>content</p></div>'.match(/(?<=\<)[a-z0-9]+(?=\>)/g)

由於 後行斷言 ES2018 才引入,所以實際應用中可能會需到問題,這個另外的話題,暫不提。

下面用另一個例子,再系統說一下先行斷言和後行斷言

有如下字串:

我愛你 我愛 愛 愛你

如果要取出字,要求這個愛字後面有,這個時候就要這麼寫,這就是 先行斷言

'我你 我愛 愛 你'.match(/愛(?=你)/g) // ["愛", "愛"]

如果要求字後面沒有,那自然也有先行否定斷言

'我愛你 我 愛你'.match(/愛(?!你)/g) // ["愛", "愛"] ,因為匹配相同...

這個時候,如果要求字後面有,前面還要有,那就要用到後行斷言了,如下:

'我你 我愛 愛 愛你'.match(/(?<=我)愛(?=你)/g) // ["愛"]


最後,如果要求愛字前面沒有我,後面也沒有我,那就要用到先行否定斷言後行否定斷言,如下:

'我愛你 我愛 愛你'.match(/(?<!我)愛(?!你)/g) // ["愛"]

後最要說,正則表示式真是太靈活了... 加一個 軟老師傳送門

相關推薦

表示式先行斷言斷言

實際開發中經常會遇到這樣的情況,需要在一組字串中取出指定的字元,例如:取出如下一段程式碼裡和html標籤<div><h2>title</h2><p>content</p></div>理想的結果是:['di

表示式先行斷言斷言

正則表示式的先行斷言和後行斷言一共有4種形式:  (?=pattern) 零寬正向先行斷言(zero-width positive lookahead assertion)  (?!pattern) 零寬負向先行斷言(zero-width negative lookahe

Jmeter使用筆記(本文偏"介面測試工具")【GET/POST的HTTP請求請求頭響應斷言表示式提取器CSV讀取引數跨執行緒組傳遞變數】

一、執行一個HTTP請求自從畢業從事軟體測試行業,大多數時間都在跟各種API打交道,使用過的介面測試工具也有許多,本文記錄下各工具的使用心得,以及重點介紹我在工作中是如何使用Jmeter做測試的,都是在windows作業系統下進行。最開始使用postman,該工具的優點是可以

JavaScript表示式(基礎分組懶惰匹配反向引用和零寬斷言

進階 懶惰匹配 分組 反向引用 零寬斷言 練習 基礎 常用字元總結: ^ 匹配行的開始位置 $ 匹配行的結束位置 \b 匹配單詞的開始或結束位置 . 匹配除換行符之外的任意字元 \w 匹配單詞字元(包括字母、數字、

先行斷言斷言

script 字符串 pre ring ctu lac them 引擎 have 後行斷言 JavaScript 語言的正則表達式,只支持先行斷言(lookahead)和先行否定斷言(negative lookahead),不支持後行斷言(lookbehind)和後行否定斷

表示式驗證url時間ip

//驗證url   function IsURL(str_url){                 var strRegex = "^((https|http|ft

表示式 - IP地址Mac地址經緯度車牌號碼校驗

驗證地址 需要把表示式首尾斜槓去掉 IP地址驗證: /^(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d

Java表示式實現港臺身份證驗證

最近由於業務的要求,需要進行港、澳、臺人員身份證驗證,現在直接上程式碼,經供參考學習,也為自己積累一些工具類: package com.qiu.validate; public class regexValidateCard { public String validateIdCard10(String id

常用的表示式大全(數字字元固定格式)

1.數字相關的正則表示式 數字:^[0-9]*$ n位定長的數字:^\d{n}$ m-n位之間的數字:^\d{m,n}$ 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})

表示式驗證郵箱金額

1.驗證郵箱正則表示式 var regEmail = /^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; 2.驗證金額正則表示式 var regMoney = /^([1-9

【python 表示式】python表示式提取郵箱網址手機號ip地址

要從文字中提取電子郵件、url、手機號、ip地址等,我們可以使用殺手鐗正則表示式。下面是我封裝的函式,方便以後拿來直接用。 # encoding: utf-8 import re # 自定義獲取文

表示式-匹配中英文字母和數字

在做專案的過程中,使用正則表示式來匹配一段文字中的特定種類字元,是比較常用的一種方式,下面是對常用的正則匹配做了一個歸納整理。匹配中文:[\u4e00-\u9fa5]英文字母:[a-zA-Z]數字:[0-9]匹配中文,英文字母和數字及_:^[\u4e00-\u9fa5_a-zA-Z0-9]+$同時判斷輸入長度

Java表示式替換移除空和多餘的空格

這幾天重拾Java寫程式碼,需要操作文字檔案中的內容。 最終,要把內容裡的空行和多餘的連續空格移除,使用String裡的replace或者replaceAll,試了很多次都沒有成功。 最後發現需要使用正則表示式Regex。先把解決方案共享如下。 1. 移除多餘的連續空格,只

表示式及grepsedawkcutsortuniq工具

1.正則表示式 (1)定義:規定一些特殊語法用來對字串進行模糊匹配; (2)特點: ①靈活性、邏輯性和功能性較強; ②可以迅速地用簡單的方式匹配字串; (3)使用事項:當正則表示式作為命令引數時,要用單引號括起來,

關於表示式的函式符號含義

re.match #從開始位置開始匹配,如果開頭沒有則無 re.search #搜尋整個字串 re.findall #搜尋整個字串,返回一個list re中的flags :可選,表示匹配模式,比如忽略大小寫,多行模式等, 具體引數為: re.I 忽略大小寫 re.L 表示特殊字符集

jmeter獲取響應資料中引數值的常用方式(JSON提取器 表示式提取器 XPath提取器 Bean Shell PostProcessor)

 JSON提取器:   XPath提取器: 返回資料格式是HTML的時候,選擇使用此種方式。     正則表示式提取器: 圖中Field to check勾選的是Response Headers,獲取的是請求頭裡的引數值。   B

表示式函式execmatchsearch

正則表示式函式中的exec含義及用法: 匹配正則,返回一個數組 lastIndex是搜尋的字元下標起始位置(從第0個字元開始搜尋) <script> var str = 'you are a boy'; var reg = new RegExp(

[轉]常用表示式大全-----使用者名稱密碼郵箱等資料格式的校驗

正則表示式收集,供自己查閱之用 轉自:http://www.jb51.net/article/72867.htm 一、校驗數字的表示式 1 數字:^[0-9]*$  2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$  4 m-n位的數字:^

常用的表示式-匹配中英文字母和數字

    在做專案的過程中,使用正則表示式來匹配一段文字中的特定種類字元,是比較常用的一種方式,下面是對常用的正則匹配做了一個歸納整理。 匹配中文:[\u4e00-\u9fa5]  英文字母:[a-zA-Z] 數字:[0-9] 匹配中文,英文字母和數字及_: ^[\u4e00

Java 表示式——貪婪匹配惰性匹配支配匹配

簡介 貪婪匹配 先看看整個字串是否存在匹配,如果未發現匹配,則去掉字串中的最後一個字元,再次嘗試匹配,如果還是未發現匹配再去掉最後一個字元,迴圈往復直到發現一個匹配或者字串不剩任何字串。 簡單量詞都是貪婪量詞。 惰性匹配 先看看字串的第一個字母