我正在尝试使用JavaScript String.replace方法来操作markdown代码。我想做到这一点,所有标题是统一的,所以我需要采取各种##,###,####等组合,并在它们之后放一个空格。
因此 - " ##"成为" ##"和" ####"变成" ####"等等。
我正在尝试使用全局标志:
md.replace("/#/g", "# ");
这不会考虑所有这些哈希符号的组合。我怎么能这样做?
答案 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,}
更改为简单+
。