JS正则positive lookbehind在线测试正常但Chrome控制台返回null原因问询
问题原因说明
- 首先是JS字符串转义规则导致原始字符串和你预期的不一致
你定义pigs变量时使用的"\X"写法中,单个反斜杠是JS的转义前缀,\X不属于JS标准转义序列,JS解析时会直接丢弃反斜杠,最终pigs变量实际存储的字符串中不存在\字符,只有单独的X,和你在正则测试网站中填写的带\X的测试文本内容完全不同。 - 其次是正则匹配目标和实际字符串不匹配
你写的正则中\\X会被正则引擎解析为匹配「一个反斜杠+一个X」的组合,但实际pigs字符串中不存在反斜杠,自然匹配不到任何内容,返回null。
修复方案
- 修正字符串定义,要让字符串实际存储
\X,定义时需要写两个反斜杠转义:
let pigs = "\\X The animal 0000 I really dig \\X Above all others is the pig. 222 \\X Pigs are noble. Pigs are clever 3333, \\X Pigs are 5555 courteous.\\X However, Now and then, to break this 6666 rule, \\X One meets 7777 a pig who is a fool. \\X"
- 再运行你写的正则即可得到预期结果:
pigs.match(/(?<=\\X)[^\\X]*5555[^\\X]*(?=\\X)/g)会返回[" Pigs are 5555 courteous."]pigs.match(/(?:\\X)[^\\X]*5555[^\\X]*(?:\\X)/g)会返回["\\X Pigs are 5555 courteous.\\X"]
验证方法
你可以直接在Chrome控制台执行console.log(pigs),查看变量实际存储的字符串内容,就能直观看到原始定义中反斜杠被丢弃的问题。
内容的提问来源于stack exchange,提问作者Lukasz Pospiech
相关产品推荐
相关产品推荐

