[英]RegEx for removing empty lines using lookarounds
當目標是上下文的開始時,此匹配將失敗
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.dir(txt.match(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm));
但是如果在開始時添加換行符,則匹配將起作用
let txt = `
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
有人知道正則表達式的哪一部分錯了嗎? 或這是(?<=)
限制?
無論如何,使其只能通過一個正則表達式匹配它,並且仍然使用(?<=)
我的環境是支持lookBehind
,而我的其他一些規則則需要檢查prev,因此我希望可以通過lookBehind
和lookAhead
處理此問題。
一個正則表達式是平均值,請勿使用2個或多個正則表達式來處理
expmale
[/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」](?:\n|$))/, '\n'],
[/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'],
碼
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.dir(txt.replace(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'));
預期的結果是
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\\n「哈,哈……」\\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\\n「哈,哈……」
實際輸出是(在node.js 12中)
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\\n\\n「哈,哈……」\\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\\n「哈,哈……」
您不需要斷言,因為它們是一次性的。
您不能在全局上下文中使用它們,因為您同時使用了它們
在它們中錨定^$
。
因此,它們是無用的。
要區分換行符,只需添加捕獲組。
另外,請勿在字符類中使用Unicode字符,您可以將
錯誤的一天。
就像我會做的那樣...
/^[\「\『][^\\r\\n]+[\』\」](\\s*\\r?\\n\\s*\\r?\\n\\s*)[\「\『][^\\r\\n]+[\』\」]$/
擴展
^
[\u300c\u300e]
[^\r\n]+
[\u300f\u300d]
( # (1 start)
\s*
\r? \n \s*
\r? \n \s*
) # (1 end)
[\u300c\u300e]
[^\r\n]+
[\u300f\u300d]
$
也許,如果可以用其他一些表達式刪除空行,例如:
([「『][^\r\n]*[』」])\s*([「『][^\r\n]*[』」])
const regex = /([「『][^\\r\\n]*[』」])\\s*([「『][^\\r\\n]*[』」])/gm; const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」`; console.log(str.replace(regex, `$1\\n$2`));
母親const regex = /([「『][^\\r\\n]*[』」])\\s*([「『][^\\r\\n]*[』」])/gm; const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」`; console.log(str.replace(regex, `$1\\n$2`));
母親const regex = /([「『][^\\r\\n]*[』」])\\s*([「『][^\\r\\n]*[』」])/gm; const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」`; console.log(str.replace(regex, `$1\\n$2`));
母親const regex = /([「『][^\\r\\n]*[』」])\\s*([「『][^\\r\\n]*[』」])/gm; const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」 「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」 「哈,哈……」`; console.log(str.replace(regex, `$1\\n$2`));
在regex101.com的右上角對表達式進行了說明,如果您希望對其進行探索/簡化/修改,並且在此鏈接中 ,您可以根據需要觀看它與某些示例輸入的匹配方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.