摘要:好處是用于斷言的字符串是一個表達式,通過可以寫任意多組字符串。該正則式斷言行尾之前的字符串不是。
之前寫 Webpack 配置的時候遇到這樣一個問題:
通過 /.(jpg|png|svg|gif|webp)$/ 判斷圖片文件,如果符合條件則將其儲存至 images 目錄下。
然而這樣做會把類似 fontawesome-webfont.svg 和 glyphicons-halflings-regular.svg 這樣的字體文件也匹配進去
這是一個強迫癥患者所不能接受的。那么問題來了:如何使用正則式匹配一段文字不包含某個字符串呢?
匹配某段文字不以某字符串結尾比如需要匹配一段文字不以 some_text 結尾
負值字符集合
/.*[^s][^o][^m][^e][^_][^t][^e][^x][^t]$/
比較容易想到的方式。雖然笨了點,但的確是有效的方法。但這樣做只能匹配長度≥9的字符串,而且只能判斷不以某一個字符串結尾。
零寬度負預測先行斷言
零寬度負預測先行斷言 判斷斷言出現的位置不匹配某個表達式。
/(?!some_text).{9}$/
該正則式斷言最后任意九個字符不是some_text。同樣只能匹配長度≥9的字符串。好處是用于斷言的字符串是一個表達式,通過 | 可以寫任意多組字符串。
零寬度負回顧后發斷言
零寬度負預測后發斷言 判斷斷言出現的位置之前不匹配某個表達式。它進入 EcmaScript 標準比較晚,Chrome 62 才提供支持。
/(?該正則式斷言行尾之前的字符串不是some_text。這樣寫就對字符串長度沒有限制,是最完美的寫法,可惜瀏覽器支持度較差。
原生 JS 方法
str.endsWith("some_text")匹配某段文字不以某字符串開頭比如需要匹配一段文字不以 some_text 開頭
負值字符集合
/^[^s][^o][^m][^e][^_][^t][^e][^x][^t]/好想,但同樣只能匹配長度≥9的字符串。
零寬度負預測先行斷言
/^(!some_text)/匹配行首位置后不出現 some_text。沒有字符串長度限制,也沒有瀏覽器兼容性問題。
原生 JS 方法
str.startsWith("some_text")匹配某段文字不包含某字符串比如匹配某段文字不包含字符串 some_text
零寬度負預測先行斷言
/^((?!some_text).)*$/正則式斷言該段文字的任意位置都不出現 some_text。這樣理解:
/^(?!some_text).(?!some_text).(?!some_text).(?!some_text).(?!some_text).(?!some_text).……$/原生 JS 方法
str.includes("some_text") // ES2016,注意不是 contains str.indexOf("some_text") >= 0 // 兼容性更好完
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93147.html
閱讀 2914·2021-11-15 18:02
閱讀 3806·2021-10-14 09:43
閱讀 3744·2021-09-08 10:41
閱讀 2526·2019-08-30 15:53
閱讀 1808·2019-08-30 14:14
閱讀 1950·2019-08-29 16:12
閱讀 3147·2019-08-29 14:03
閱讀 1283·2019-08-29 13:46