[英]RegExp: Determine if previous Line above match contains text
給出以下文本行:
"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中沒有任何后顧之憂 ,有沒有一種簡單的方法可以做到這一點?
這是實現此目的的最簡單方法:
所有功勞歸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"));
一種簡單的方法是只使用捕獲組,然后在替換中重復使用
/([^\n\r])(\n\r?)(?:<code>)/g
這與非換行符,后跟換行符和<code>
匹配。
如果將匹配項替換為組1並兩次替換為組2,則會得到所需的雙換行符,並且所有不匹配的輸入都將保持不變。
text.replace(/([^\n\r])(\n\r?)(?:<code>)/g, '$1$2$2');
為了您的方便而工作的小提琴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.