给出以下文字:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lacinia
convallis ornare.
<code>function js() {
return $this->_js;
}
</code>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lacinia
convallis ornare."
我想确定<code>
上方的行是文本行还是空白换行符。如果有文本,那么我将添加一个额外的换行符,以便代码和文本之间有一个空行。如果没有,那就继续吧。
:此
"Suspendisse lacinia convallis ornare
<code>function js(){...."
会转向此
"Suspendisse lacinia convallis ornare
<code>function js(){...."
鉴于JavaScript中没有 look-behinds ,是否有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
这是实现这一目标的最简单方法:
所有归功于WiktorStribiżew(查看他在OP中的评论)
示例代码段
const s = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lacinia
convallis ornare.
<code>function js() {
return $this->_js;
}
</code>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lacinia
convallis ornare.`;
let rx = /(\S[^\S\r\n]*\n)(<code>)/g;
console.log(s.replace(rx, "$1\n$2"));
答案 1 :(得分:0)
一种简单的方法就是使用一个捕获组,然后在替换
中重复使用/([^\n\r])(\n\r?)(?:<code>)/g
这与非换行符后跟换行符然后<code>
匹配。
如果您将匹配替换为组1,将两次替换为组2,则最终会得到所需的双换行符,并保留所有不匹配的输入。
text.replace(/([^\n\r])(\n\r?)(?:<code>)/g, '$1$2$2');
为方便起见,