确定字符串中的组

Ben*_*Dev 5 javascript regex reduce dictionary typescript

我正在尝试确定字符串中的组。

例如,“ AAABBCCCCD ”应该根据字符串中的模式将["AAA", "BB", "CCCC", "D"]作为组。

这是我的简单功能:

const patternGroup = (str) => {
  let cursor = str[0]
  let groups = []
  let currentGroup = ""
  for (let i = 0; i < str.length; i++) {
    let ch = str[i]
    if (ch === cursor) {
      currentGroup += ch
    }
    else {
      groups.push(currentGroup)
      currentGroup = ch
      cursor = ch
    }
  }
  if (currentGroup !== "") {
    groups.push(currentGroup)
  }
  return groups
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但我正在寻找一个更简单的函数,可能使用 map/reduce 或 regex。有任何想法吗?

Por*_*and 6

你可以简单地使用正则表达式:

var input = "AAABBCCCCD";
const res = input.match(/([^])(\1*)/g);

console.log(res)
Run Code Online (Sandbox Code Playgroud)

  • `[^]` 接受每个字符,例如空格,但 `.` 不接受。第二次捕获没有任何原因:))只是为了可读性。 (2认同)

omt*_*t66 5

类似于您的实现:

const patternGroupWithReduce = (str) => {
  let currentGroup = ""
  return str.split("").reduce((acc, cur, i) => {
    currentGroup += cur
    if (str[i + 1] !== cur) {
      acc.push(currentGroup)
      currentGroup = ""
    }
    return acc
  }, [])
}

const patternGroupWithRegex = (str) => {
  return str.match(/(.)\1*/g)
}
Run Code Online (Sandbox Code Playgroud)

RegEx /(.)\1 /g * 使用捕获组的反向引用。

\1* 尽可能多地匹配最近捕获的相同字符。

这是它的可视化: 在此处输入图片说明