javascript - 如何使用正则表达式对不同的字母(不一定是连续的)进行分组
问题描述
下面的示例按预期结果:
const str = "abbcccddddeeeeeffffff";
const res = str.match(/(.)\1*/g);
console.log(res);
但是,如果我尝试对非连续字母进行分组:
const str = "abxbcxccdxdddexeeeefxfffffxx";
const res = str.match(/(.)\1*/g);
console.log(res);
我想得到这样的东西:
[ 'a', 'bb', 'xxxxxxx', 'ccc', 'dddd', 'eeeee', 'ffffff']
解决方案
在应用 Regex 之前对字符串进行排序:
const str = "abxbcxccdxdddexeeeefxfffffxx";
const res = [...str].sort().join('').match(/(.)\1*/g);
console.log(res);
如果您绝对希望它们按该顺序排列,则可以对字符串进行去重并单独匹配字母
const str = "abzzzbcxccdxdddexeeeefxfffffxx";
const res = [];
[...new Set(str)].forEach(letter => {
const reg = new RegExp(`${letter}`, "g");
res.push(str.match(reg).join(""));
});
console.log(res);
推荐阅读
- rust - 在当前范围内没有为 struct `chrono::offset::utc::Utc` 找到名为 `now` 的函数或关联项
- mysql - 逐行处理 MySQL 中的 TEXT BLOB 字段
- javascript - 如何动态地将选项添加到 Bootstrap 选择器?
- wordpress - 在页面加载/下载时将文本字符串附加到图像文件的末尾
- c# - 如何将 SQL 子查询转换为 Linq
- java - 识别多种模式的程序
- javascript - 使用字段 onload 的值运行 javascript
- python - 关于类的“属性”属性的问题
- github - Github 操作:一项工作的影响能否触发另一项工作?
- azure - Azure AD SAML 2.0 令牌未加密