正则表达式匹配字符串开头的字符串分组

时间:2015-08-06 10:38:12

标签: javascript regex replace markdown

我有一个像这样的降价字符串:

var str = "
  # Title here
  Some body of text
  ## A subtitle
  ##There may be no space after the title hashtags
  Another body of text with a Twitter #hashtag in it";

现在我想匹配并替换所有标题主题标签以向其添加另一个主题标签。但我需要避免匹配文本行中的#标签(twitter标签)。我正在尝试实现以下字符串:

var str = "
  ## Title here
  Some body of text
  ### A subtitle
  ###There may be no space after the title hashtags
  Another body of text with a Twitter #hashtag in it";

到目前为止,我已经有了这个正则表达式,它完成了这项工作,但也匹配了twitter标签:

str = str.replace(/(#+)/g, "$1#");

每行文字后都有回车符。如何在不影响文本中的主题标签的情况下实现此替换。

1 个答案:

答案 0 :(得分:3)

如果您添加/m,则可以使用^来匹配行的开头(没有/m,它只匹配整个字符串的开头)。
然后,您可以使用\s*(感谢stribizhev)保留每行开头的所有空格。

str = str.replace(/^\s*#+/gm, "$&#");

演示:

// Note that multiline strings are not actually legal in JavaScript
var str = [
'  # Title here',
'  Some body of text',
'  ## A subtitle',
'  ##There may be no space after the title hashtags',
'  Another body of text with a Twitter #hashtag in it'
].join('\n');
document.write(str.replace(/^\s*#+/gm, "$&#"));
/* For demo only */
body{white-space:pre-line;font-family:monospace}