如何用正则匹配前面无特定模式的换行符?
匹配前面无
</u>标签的换行符的正则方案 你之前的正则无效是因为用错了断言类型:(?!</u>)是正向预查,它检查的是换行符之后的内容,而你需要的是检查换行符之前有没有</u>,得用负向后顾断言(后行断言)。
正确正则表达式(支持ES2018+的环境,比如现代浏览器、Node.js、Python 3.6+等)
/(?<!<\/u>)(?:\r\n|\r|\n)/g
正则说明
(?<!<\/u>):负向后顾断言,确保当前位置(换行符的起始位置)的前面不是</u>标签(?:\r\n|\r|\n):非捕获组,匹配所有常见的换行格式(Windows的\r\n、Linux/macOS的\n、旧Mac的\r)
匹配验证
对应你的示例字符串:
caaaaa aaa <u>refnkrnkfenr</u> rllllrmlef rhgfvhr hbgfdsa
这个正则会匹配第1、2、4、5行末尾的换行符,以及第6行末尾的换行符(如果存在),完全符合你的需求。
兼容旧环境的替代方案
如果你的正则引擎不支持后行断言(比如旧版Python、某些老工具),可以用反向匹配逻辑:先匹配所有换行符,再过滤掉前面紧跟</u>的。或者用如下正则(通过捕获组间接实现):
/(?:.*?(?<!<\/u>))(?:\r\n|\r|\n)/g
不过这种方式需要提取匹配结果里的换行符部分,不如后行断言直接。
内容的提问来源于stack exchange,提问作者User7482938478920
相关产品推荐
相关产品推荐

