正则表达式匹配具有转义的新行字符的行

时间:2017-08-31 06:21:25

标签: javascript regex

鉴于以下文字内容:

npm i --save \
  gulp \
  express \
  forever
echo hi

我想在自己的HTML标记中包围每个命令。

我试过这个:

text.replace(/(.*)[^\\\n]\n/g, (a, b) => `<pre>${b}</pre>`);

但这只匹配最后两行。我正在寻找一种方法来匹配每一行,同时考虑逃避。

模式应匹配以字母开头的字符串,并以不以\开头的新行结束。

1 个答案:

答案 0 :(得分:2)

我可以建议

s = s.replace(/^[A-Za-z](?:[\s\S]*?[^\\]$)?/gm, '<pre>$&</pre>')

请参阅regex demo

<强>详情

  • ^ - 一行的开头(由于m修饰符^匹配行的开头而不是整个字符串)
  • [A-Za-z] - ASCII字母
  • (?:[\s\S]*?[^\\]$)? - 1或0个序列:
    • [\s\S]*? - 任意0个字符,尽可能少,直到第一次出现
    • [^\\]$ - 一行以外的\以外的字符。

请注意,要替换为捕获组值,您不需要在String#replace内使用回调,您可以使用简单的字符串替换模式。例如,要在替换中引用整个匹配值,您只需指定$&模式,替换为第一个捕获组值,使用$1等。有关详细信息,请参阅String#replace MDN reference的信息。