如何编写正则:匹配前缀为偶数个?的',奇数个?时不匹配
可用正则表达式
(?<=(?<!\?)(?:\?\?)*)'
实现逻辑
- 以零宽正向后行断言限定
'的前置匹配规则,不会额外捕获前缀字符,完全适配split场景的需求 (?<!\?)确保前缀的起始位置没有单独的?,避免奇数个?被误判(?:\?\?)非捕获组匹配2个连续的?,*表示该组可出现0次或多次,即前置?总个数为偶数(0、2、4……)
效果验证
针对你给出的测试场景:
测试字符串:' ??' ????' ?' ??????'
执行split操作的代码示例(JS环境):
const testStr = "' ??' ????' ?' ??????'"; const matchReg = /(?<=(?<!\?)(?:\?\?)*)'/g; const splitResult = testStr.split(matchReg); console.log(splitResult); // 输出:['', '??', '????', "?'", '??????']
完全符合你的预期结果。
兼容提示:如果所用正则引擎不支持可变长度后行断言(如Java 8及更早版本),可换用匹配规则
(^|[^?])(?:\?\?)*',提取匹配结果中的'即可。
内容的提问来源于stack exchange,提问作者magmine
相关产品推荐
相关产品推荐

