运用正则表达式找出一切不包括某字符串的行

之前写 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)$/

该正则式断言行尾之前的字符串不是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 // 兼容性更好

    原文作者:CarterLi
    原文地址: https://segmentfault.com/a/1190000013516049
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞