首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RegEx删除空行

使用RegEx删除空行
EN

Stack Overflow用户
提问于 2019-08-09 23:00:08
回答 2查看 80关注 0票数 0

当目标是上下文的开始时,此匹配将失败。

代码语言:javascript
复制
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」`;

console.dir(txt.match(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm));

但是,如果在开始时添加一个换行符,那么匹配就可以了。

代码语言:javascript
复制
let txt = `
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」`;

有人知道regex的哪一部分是错的吗?还是这是(?<=)限制?

无论如何,使它只需要一个正则表达式就可以匹配,并且仍然使用(?<=)

我的env是支持lookBehind的,我的另一些规则是需要检查prev,所以我希望lookBehindlookAhead能够处理这个问题。

一个regex是指,不要使用2或更多regexp来处理这个问题。

外派

代码语言:javascript
复制
    [/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」](?:\n|$))/, '\n'],

    [/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'],

代码

代码语言:javascript
复制
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」

「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」`;

console.dir(txt.replace(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'));

预期结果是

「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」

实际输出为(在node.js 12中)

「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n\n「哈,哈……」\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」

EN

回答 2

Stack Overflow用户

发布于 2019-08-09 23:47:27

您不需要断言,因为它们是单独使用的。

您不能在全局上下文中使用它们,因为您同时使用了

锚定在他们的^$

因此,它们是无用的。

要区分换行符,只需添加捕获组即可。

此外,不要在字符类中使用Unicode字符,您可以使用

有一天搞错了。

就像我那样做..。

/^[\u300c\u300e][^\r\n]+[\u300f\u300d](\s*\r?\n\s*\r?\n\s*)[\u300c\u300e][^\r\n]+[\u300f\u300d]$/

扩容

代码语言:javascript
复制
 ^ 
 [\u300c\u300e] 
 [^\r\n]+ 
 [\u300f\u300d] 
 (                             # (1 start)
      \s* 
      \r? \n \s* 
      \r? \n \s* 
 )                             # (1 end)
 [\u300c\u300e] 
 [^\r\n]+ 
 [\u300f\u300d] 
 $ 
票数 1
EN

Stack Overflow用户

发布于 2019-08-09 23:20:07

也许,如果用其他表达式删除空行是可以的,例如:

代码语言:javascript
复制
([「『][^\r\n]*[』」])\s*([「『][^\r\n]*[』」])

测试

代码语言:javascript
复制
const regex = /([「『][^\r\n]*[』」])\s*([「『][^\r\n]*[』」])/gm;
const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」

「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」

「哈,哈……」

「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;

console.log(str.replace(regex, `$1\n$2`));

该表达式将在regex101.com的右上面板上解释,如果您希望探索/简化/修改它,那么在此链接中,您可以观察它如何与某些示例输入相匹配(如果您愿意)。

带看台的演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57437993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档