javascript - 用于使用环视删除空行的正则表达式

标签 javascript node.js regex typescript

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

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

「哈,哈……」`;

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

但是如果在开头添加一个换行符,匹配就可以了

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

「哈,哈……」`;

有人知道正则表达式的哪一部分是错误的吗?或者这是 (?<=)限制?

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


我的环境支持lookBehind ,我的一些其他规则需要检查prev,所以我希望可以通过lookBehind解决这个问题。和 lookAhead


一个正则表达式是平均的,不要使用 2 个或更多正则表达式来处理这个

男性

    [/(?<=^[「『][^\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 字符,你可以制作一个
错了一天。

就像我会做的那样......

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

展开

 ^ 
 [\u300c\u300e] 
 [^\r\n]+ 
 [\u300f\u300d] 
 (                             # (1 start)
      \s* 
      \r? \n \s* 
      \r? \n \s* 
 )                             # (1 end)
 [\u300c\u300e] 
 [^\r\n]+ 
 [\u300f\u300d] 
 $ 

关于javascript - 用于使用环视删除空行的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57437993/

相关文章:

java - jQuery 和 Java 小程序

javascript - Heroku 上的 WebSocket ERR_CONNECTION_REFUSED

c++ - 如何散列 std::regex?

regex - mongodb正则表达式大写五个字母

javascript - WebGL 中的结束 <li> 标签

javascript - 动态 CasperJS 循环在随机迭代时终止

javascript - Odoo 自定义表单字段小部件 - 如何显示字段值?

node.js - fs.promises.readFile 中没有堆栈 ENOENT 错误

node.js - 自动允许 Electron 应用程序的隐私

php - 正则表达式 (?&lt;!-) 是什么意思