【问题标题】:Count groups of characters at the start of each line计算每行开头的字符组
【发布时间】:2021-12-28 23:53:09
【问题描述】:

我真的很想找到一行前的空格数(在我的情况下实际上是“制表符”,但实际上不是),并且我有一段似乎可以工作的代码,但它确实是 em> 又坏又慢。请在下方查看:

var data = "test\n    another test\none more"
var tabs = []
data.split("\n").forEach((line, index) => {
  tabs[index] = Math.floor((line.length - line.replace(/^(.*?)[^\ ]/g, "").length) / 4)
})
alert(tabs.join(", "))

此外,如果可能的话,只需要一种方法来查找四个空格的组。有没有最快的方法?

【问题讨论】:

  • 不确定它是不是最快的,但是一个正则表达式和一个循环来得到长度"test\n another test\none more".match(/(^|\n)\s*/g).map(x=>x.replace(/\n/,'').length/4)

标签: javascript html regex


【解决方案1】:

你可以使用

data.split('\n').map(x => (x.match(/ {4}/gy) || []).length);

查看更新的演示:

var data = "test\n    another test\n        one more";
var tabs = data.split('\n').map(x => (x.match(/ {4}/gy) || []).length);
console.log(tabs.join(","))

这里,

  • .split('\n') - 将字符串分割成行
  • .map(x => (x.match(/ {4}/gy) || []).length) - 获取每一行并在其上应用.match(/ {4}/gy)/ {4}/gy 匹配所有、多次出现(由于 g 标志)从字符串开头的四个空格,并且下一个匹配仅发生在前一个匹配之后(感谢粘性 y 标志)。
  • (... || []).length 获取四个空格的匹配组的计数,如果没有匹配项,则 0|| [] 确保我们得到零,无一例外)。

【讨论】:

  • 直截了当,解释得很好。
  • 我认为我没有正确解释它:我只是想找到行前四个空格的组数。
  • @InfiniteGamer 更新。
  • 我们不需要在正则表达式开始时使用“^”来确保我们不会稍后再查看字符串,例如test test吗?
  • @InfiniteGamer 现在是y 标志来确保它。
猜你喜欢
  • 2016-01-26
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2013-08-06
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多