鉴于以下文字内容:
npm i --save \
gulp \
express \
forever
echo hi
我想在自己的HTML标记中包围每个命令。
我试过这个:
text.replace(/(.*)[^\\\n]\n/g, (a, b) => `<pre>${b}</pre>`);
但这只匹配最后两行。我正在寻找一种方法来匹配每一行,同时考虑逃避。
模式应匹配以字母开头的字符串,并以不以\
开头的新行结束。
答案 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的信息。