正则与文本处理指南
正则状态:global、sticky 与 lastIndex
解释重复 test 的不同结果,用 sticky 连续解析并避免跳过非法间隙。
识别有状态表达式
带 g 或 y 的正则成功后会更新 lastIndex,复用对象可能让下一次从更后位置开始。
只判断是否存在时可不用这些标志,或每次明确重置 lastIndex。
const r=/a/g;
r.test('a') → true
r.test('a') → false
r.lastIndex → 0sticky 用于连续解析
global 会继续向后寻找,sticky 要求在 lastIndex 精确命中,当前位置非法就失败。
分词时应明确消耗预期分隔符,避免全局搜索悄悄跳过不合法间隙。
const r=/\d+/y; r.lastIndex=2;
r.exec('x 42')?.[0] → '42'
r.lastIndex=1; r.exec('x 42') → null处理零长度匹配
有些模式可以成功匹配空字符串,手写 exec 循环可能让 lastIndex 不变并无限重复。
使用合适的迭代器,或在空匹配时按码点推进;Unicode 模式会影响正确推进方式。
区分单次运行与对象复用
本站每次运行创建正则,重复点击按钮不等于复用应用中的同一个正则对象。
状态样例应在实际代码中复现,再用正则工具独立验证模式与输入。