繁体   English   中英

使用RegEx搜索字符串以获取重复的字母并输出到Javascript中的二维数组

[英]Search string using RegEx for repeated letters and outputting into two-dimensional array in Javascript

我才刚开始使用RegEx。 到目前为止,我有类似的东西,但看来我的模式已关闭。

function hasRepeatedLetters(str) {
  var patt = /[a-zA-Z]/g;
  var result = patt.exec(str);
  return result;
}
console.log(hasRepeatedLetters('aaBcDDbcca')); 

我希望能够输入带有字母组合的任何参数,并且输出是一个二维数组,其中第一个值是重复字母,第二个值是重复字母长度。

[[ “一”,3],[ “b” 的,1],[ “B”,1],[ “c” 的,3],[ “d”,2]]

可能的解决方案,使用Array#forEach函数。

 var str = 'aaBcDDbcca'.split(''), obj = {}; str.forEach(v => obj[v] ? obj[v]++ : obj[v] = 1); var res = Object.keys(obj).map(v => [v, obj[v]]); console.log(JSON.stringify(res)); 

就个人而言,我建议您将其保留为对象。

 var str = 'aaBcDDbcca'.split(''), obj = {}; str.forEach(v => obj[v] ? obj[v]++ : obj[v] = 1); console.log(JSON.stringify(obj)); 

这是基于地图/对象的解决方案

var str = 'aaBcDDbcca';
var map = {}; // create a hash for keys and their counts
// loop over all characters and then add count
Array.from(str).forEach(function(character) {
  map[character] = map[character] ? map[character] + 1 : 1;
});
// finally, convert map to a 2D array with 1st item as key and second item as count
var counts = Object.keys(map).map(function(key) {
  return [key, map[key]];
})
console.log(counts);

您可以为此使用ES6 Map ,它具有一些不错的功能:

  • 地图的set方法再次返回地图
  • 应用于地图的传播语法会生成所需的对数组

 function hasRepeatedLetters(str) { return [...[...str].reduce( (acc, c) => acc.set(c, (acc.get(c) || 0) + 1), new Map )]; } console.log(hasRepeatedLetters('aaBcDDbcca')); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM