如何编写正则匹配包含首尾标记的完整私钥内容?
匹配完整私钥块的正则表达式解决方案
你之前的正则存在两个问题:
- 使用了正向预查(
(?=...)),这类语法仅做匹配校验,不会将匹配到的内容纳入最终结果,导致首尾的标记字符串没被捕获; [-]+的写法虽然能匹配连字符,但私钥的首尾标记是固定格式的字符串,直接写完整标记更精准,避免误匹配其他带连字符的内容。
正确的正则表达式
(?ms)^-----BEGIN PRIVATE KEY-----(.*?)^-----END PRIVATE KEY-----$
正则说明
(?ms):启用多行模式(m)和单行模式(s)。多行模式让^和$匹配每行的首尾;单行模式让.可以匹配换行符,确保能捕获私钥中间的多行内容。- 直接写入完整的首尾标记字符串,保证精确匹配目标格式。
(.*?):非贪婪匹配中间的所有内容,避免在存在多个私钥块时,匹配到超出预期的范围。
Node.js 示例代码
const text = `whatever -----BEGIN PRIVATE KEY----- DANBgkqhkiG9w0BFQEFAASCBKkwggSlAgEA DANBgkqhkiG9w0BFQEFAASCBKkwggSlAgEA DANBgkqhkiG9w0BFQEFAASCBKkwggSlAgEA s1HQDfvgtTziGzwFxggjxYvfOw== -----END PRIVATE KEY----- whatever`; const regex = /(?ms)^-----BEGIN PRIVATE KEY-----(.*?)^-----END PRIVATE KEY-----$/; const matchResult = text.match(regex); if (matchResult) { console.log(matchResult[0]); }
运行上述代码,会输出你期望的完整私钥块(包含首尾标记)。
内容的提问来源于stack exchange,提问作者Node.JS
相关产品推荐
相关产品推荐

