簡體   English   中英

RegExp:確定匹配項上方的前一行是否包含文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM