如何用REGEX替换未知数量的相同字符?

时间:2015-09-03 21:34:31

标签: javascript regex

我正在尝试使用JavaScript String.replace方法来操作markdown代码。我想做到这一点,所有标题是统一的,所以我需要采取各种##,###,####等组合,并在它们之后放一个空格。

因此 - " ##"成为" ##"和" ####"变成" ####"等等。

我正在尝试使用全局标志:

md.replace("/#/g", "# ");

这不会考虑所有这些哈希符号的组合。我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

您可以使用:

md = md.replace(/(#+)/g, '$1 ');

其中#+将匹配另外1 #并将其归为$1,替换只是'$1 ',这将在多个#之后添加一个空格

答案 1 :(得分:2)

我会发布我的建议,因为我也准备好了,但在看到一些答案之后首先被扣留:

md = md.replace(/#+/g, '$& ');

我认为这个更好,因为:

  • 它使用g选项,将处理输入字符串中的所有###
  • 当我们想要替换整个匹配的文本时,它不使用不必要的捕获组($&反向引用实际上是整个匹配)。捕获组会在堆栈中保留捕获的文本,这可能比没有它们时要慢一些。在这里,我们只是不需要捕获组,为什么要使用它们呢?

答案 2 :(得分:1)

一种方法是:

id             cell formula1    formula2
banner1        1    1,          TRUE
banner1        2    2,          TRUE
banner1        5    2, 5        FALSE
banner2        3    3,          TRUE
banner2        6    3, 6        FALSE
banner4        4    4,          TRUE
banner4        7    4, 7        FALSE

md = md.replace(/([#])([^# ])/g, '$1 $2'); 检查([#])#检查除散列或空格之外的任何内容。然后在它们之间添加一个空格。因此,额外的空格不会添加到([^# ])形式的字符串中。

答案 3 :(得分:0)

您可以使用以下正则表达式替换两个或多个连续#个字符的出现次数:

// Two or more # characters
md = md.replace(/(#{2,})/, "$1 ")

// One or more # characters
md = md.replace(/(#+)/, "$1 ")

如果您想在单个#字符后附加空格,则可以将量词从{2,}更改为简单+