You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条RegEx在JavaScript中捕获任意起始的键盘连续字符序列

解决方案

你要匹配的主键盘区中间行连续走键序列严格遵循asdfghjkl的相邻顺序,只要把所有可能的≥3长度的起始子段整合到单条正则的多选分支里,就能实现任意位置起始的序列捕获,不需要单独写多套规则。


可用单条正则

/(asd(?:f(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|sdf(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|dfg(?:h(?:j(?:k(?:l)?)?)?)?|fgh(?:j(?:k(?:l)?)?)?|ghj(?:k(?:l)?)?|hjkl?|jkl)/gi

基础使用示例(非重叠匹配)

默认匹配最长非重叠的连续序列,直接拿匹配结果的length属性即可得到序列长度:

const inputStr = "testasdfgh123sdfgxxjkl";
const keySeqRegex = /(asd(?:f(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|sdf(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|dfg(?:h(?:j(?:k(?:l)?)?)?)?|fgh(?:j(?:k(?:l)?)?)?|ghj(?:k(?:l)?)?|hjkl?|jkl)/gi;

const matches = inputStr.match(keySeqRegex) || [];
const seqLengths = matches.map(item => item.length);

console.log(matches); // 输出:['asdfgh', 'sdfg', 'jkl']
console.log(seqLengths); // 输出:[6, 4, 3]

重叠匹配场景

如果你需要捕获所有重叠的符合要求子段(比如asdf要同时拿到asd、asdf、sdf),可以改用带正向前瞻捕获的正则:

const input = "asdf";
const overlapRegex = /(?=(asd(?:f(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|sdf(?:g(?:h(?:j(?:k(?:l)?)?)?)?)?|dfg(?:h(?:j(?:k(?:l)?)?)?)?|fgh(?:j(?:k(?:l)?)?)?|ghj(?:k(?:l)?)?|hjkl?|jkl))/gi;

const matches = [];
let match;
while((match = overlapRegex.exec(input)) !== null) {
  matches.push(match[1]);
}

console.log(matches); // 输出:['asd', 'asdf', 'sdf']

如果需要适配其他键盘行(比如顶行qwertyuiop、底行zxcvbnm),按照相同逻辑把对应起始的≥3长度连续子段加入正则的多选分支即可。


内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:45:07