【问题标题】:regex doesnt match the line starts with character e正则表达式与以字符 e 开头的行不匹配
【发布时间】:2015-05-15 21:36:02
【问题描述】:

我有这样一个正则表达式:

/^[^(\-.+\n|content|\n\-.+\-{2})](.+)/igm

这是一个示例输入:

------WebKitFormBoundaryKanSEkvcMamqayJY
Content-Disposition: form-data; name="fl"; filename="emty"
Content-Type: application/octet-stream

this is trial

------WebKitFormBoundaryKanSEkvcMamqayJY--

我想捕获除以下之外的每一行:

------WebKitFormBoundaryKanSEkvcMamqayJY
    Content-Disposition: form-data; name="fl"; filename="emty"
    Content-Type: application/octet-stream  
------WebKitFormBoundaryKanSEkvcMamqayJY--

这个正则表达式运行良好,除非该行以下列字符开头:

e,t,o,+,|,c,n,.

我猜这是关于字符 ASCII 码范围的问题,不知道如何解决这个问题。

【问题讨论】:

    标签: regex node.js ascii


    【解决方案1】:

    恐怕您的正则表达式存在更大的问题。简而言之,[^(\-.+\n|content|\n\-.+\-{2})] 只匹配 1 个字符,因为它是一个字符类。

    假设您要忽略的行以超过 3 个 -s 和 Content- 开头,您可以使用以下正则表达式:

    /^(?!-{3,}|content-).+$/igm
    

    这是demo

    为了以防有前导空格,我会使用更安全的版本:

    /^(?!\s*(?:-{3,}|content-)).+$/igm
    

    最后,如果您需要匹配空行,请将.+ 替换为.*

    【讨论】:

    • 我特别没有添加 g fag,因为数据来自小范围的请求,当你使用 g 标志时,javascript 的行为很奇怪
    • g 只是进行全局搜索。一旦你的正则表达式符合你的需要,它应该表现良好。
    • 在 javascript 中它匹配最后一个索引并给出错误无论如何我的数据流逐行所以没有问题
    • 我明白了。此外,在正则表达式中,多行模式m 也确保了逐行行为。所以,它必须足够安全。
    【解决方案2】:

    这就是诀窍:

    /^(?!\s*(-|Content)).*/
    

    demo

    【讨论】:

    • 我不确定它是否安全,看看this demo
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2015-02-26
    相关资源
    最近更新 更多