如何编写正则表达式,确保匹配结果后面不包含特定字符串?

2026-03-30 09:530阅读0评论SEO问题
  • 内容介绍
  • 相关推荐

本文共计1635个文字,预计阅读时间需要7分钟。

如何编写正则表达式,确保匹配结果后面不包含特定字符串?

之前仅会使用 /abc(?!def)/.exec(abcdef\nabczzz) 进行匹配,匹配到 abczzz,这种简单的固定写法,实际使用频率几乎趋近于0。很多场景下不能死写 abc,需要顺理成章地写成 /.+(\!def).+/.exec(abcdef\nabczzz)。

以前只会/<abc(?!def).+>/.exec("<abcdef>\n<abczzz>"),匹配到<abczzz>,这种简单的固定写法,但实际使用次数几乎趋近于0。

很多场景不能写死abc,顺理成章的就写成了/<.+(?!def).+>/.exec("<abcdef>\n<abczzz>"),咦?咋把前面的匹配到了!从入门到放弃。

昨天(2019-04-07)随手写了一下/<(?:.(?!def))+>/.exec("<abcdef>\n<abczzz>"),原来是对.+(?!排除的字符串)这个结构能起到的作用理解错了,怪不得达不到预期,(.(?!排除的字符串))+才是正解。

留下一个未解的问题,每个字符后面排除一下的能良好工作,一堆未定长度字符后排除一下怎么就不能工作,前瞻不会和前面的+、*、{}起作用吗?解释看结尾。

:/<(?!.+def).+>/.exec("<abcdefzzz>\n<abczzz>")写法也可以。

阅读全文

本文共计1635个文字,预计阅读时间需要7分钟。

如何编写正则表达式,确保匹配结果后面不包含特定字符串?

之前仅会使用 /abc(?!def)/.exec(abcdef\nabczzz) 进行匹配,匹配到 abczzz,这种简单的固定写法,实际使用频率几乎趋近于0。很多场景下不能死写 abc,需要顺理成章地写成 /.+(\!def).+/.exec(abcdef\nabczzz)。

以前只会/<abc(?!def).+>/.exec("<abcdef>\n<abczzz>"),匹配到<abczzz>,这种简单的固定写法,但实际使用次数几乎趋近于0。

很多场景不能写死abc,顺理成章的就写成了/<.+(?!def).+>/.exec("<abcdef>\n<abczzz>"),咦?咋把前面的匹配到了!从入门到放弃。

昨天(2019-04-07)随手写了一下/<(?:.(?!def))+>/.exec("<abcdef>\n<abczzz>"),原来是对.+(?!排除的字符串)这个结构能起到的作用理解错了,怪不得达不到预期,(.(?!排除的字符串))+才是正解。

留下一个未解的问题,每个字符后面排除一下的能良好工作,一堆未定长度字符后排除一下怎么就不能工作,前瞻不会和前面的+、*、{}起作用吗?解释看结尾。

:/<(?!.+def).+>/.exec("<abcdefzzz>\n<abczzz>")写法也可以。

阅读全文