我有一个像这样的降价字符串:
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#");
每行文字后都有回车符。如何在不影响文本中的主题标签的情况下实现此替换。
答案 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}