正则匹配首个非URL片段至|字符 支持带空格文本及贪婪匹配
正则匹配需求说明
待匹配文本样例:
https://stackoverflow.com | https://google.com | first text to match | https://randomsite.com | https://randomurl2.com | text | https://randomsite.com | https://randomsite.com | https://randomsite.com |
核心匹配规则:
- 匹配字符串中第一个非URL序列,范围截止到该序列后的
|字符,上述样例期望匹配结果为:
https://stackoverflow.com | https://google.com | first text to match |
- 原有正则
/^(.*)[|]\s(\b\w*\b)?\s[|]/gm存在缺陷:仅支持无空格的非URL字符串匹配,遇到first text to match这类带空格的内容会匹配失败,需要同时兼容带空格、无空格的非URL文本场景 - 额外支持贪婪匹配模式:可匹配全部内容直到出现
text |为止
可用正则方案
基础匹配模式(匹配首个非URL段到对应结束|)
正则表达式:
/^.*?\|\s*[^|]*?\|/gm
逻辑拆解:
^锚定行起始位置,避免跨行乱匹配.*?\|非贪婪匹配所有前置URL段,直到命中非URL段前的最后一个|分隔符\s*兼容分隔符和非URL内容之间的任意空白字符[^|]*?匹配非URL段的全部内容:因为各段用|分隔,非URL段内部不会出现|,不管内容有没有空格都能完整捕获\|匹配非URL段后的结束分隔符,刚好卡到要求的匹配截止位置
贪婪匹配模式(匹配到text |位置为止)
正则表达式:
/^.*?text\s*\|/gm
逻辑拆解:
- 锚定行首后非贪婪匹配所有前置内容,直到命中
text关键字加后续的|分隔符,\s*兼容text和|之间存在空白的场景,匹配范围刚好覆盖到要求的截止位置。
匹配效果验证
针对给出的测试样例:
- 基础模式可准确捕获目标段,不会误纳入后续行的内容,非URL段不管带不带空格都能正常匹配
- 贪婪模式可完整覆盖从行首到第一处
text |的全部内容,符合扩展需求
内容的提问来源于stack exchange,提问作者pu4cu
相关产品推荐
相关产品推荐

