如何编写正则表达式匹配字符串中重复出现的字母?
匹配字符串中重复字母的正则实现方案
核心正则构造
如果你需要匹配连续重复出现的英文字母(对应你给出的示例场景),直接使用如下正则即可:/([a-zA-Z])\1/g
各部分含义说明:
([a-zA-Z]):捕获组,匹配任意单个英文字母,匹配结果会存入编号为1的分组中\1:反向引用,代表和第1个分组捕获到的内容完全一致的字符,和前面的捕获组组合就可以实现「两个连续相同字母」的匹配逻辑g:全局修饰符,开启后会检索整个字符串的所有匹配结果,不会只返回第一个符合条件的内容
代码示例
直接搭配string.match()方法使用即可:
const inputStr = "asdoekrikkm"; // 匹配连续重复的字母段 const matchResult = inputStr.match(/([a-zA-Z])\1/g) || []; console.log(matchResult); // 输出:['kk'] // 如果需要提取去重后的单个重复字母,可以做二次处理 const repeatedLetters = [...new Set(matchResult.map(item => item[0]))]; console.log(repeatedLetters); // 输出:['k']
场景扩展
- 如果需要匹配所有连续重复字符(不限于英文字母,包含数字、符号等),可以把
[a-zA-Z]替换为.,正则修改为/(.)\1/g - 如果不需要区分字母大小写,在末尾加
i修饰符即可,正则为/([a-zA-Z])\1/gi - 如果需要匹配非连续出现的重复字母(比如字符串
akbkc里的字母k),可以使用正则/([a-zA-Z])(?=.*\1)/g,匹配结果会直接返回所有出现过多次的单个字母
内容的提问来源于stack exchange,提问作者DBZ-05
相关产品推荐
相关产品推荐

